You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Excel Power Query批量处理PDF多页同格式表格并合并结果?

批量处理PDF多表格的Power Query解决方案

单个PDF批量处理所有表格

无需手动复制修改查询,通过遍历PDF返回的所有表格并批量执行处理逻辑,即可合并所有结果:

let
    // 加载目标PDF的所有表格元数据
    Source = Pdf.Tables(File.Contents("C:\path\to\file.pdf"), [Implementation="1.3"]),
    // 为每个表格添加处理后的结果列
    ProcessTables = Table.AddColumn(Source, "ProcessedTable", each 
        let
            TableData = [Data],
            ChangedType = Table.TransformColumnTypes(TableData,{{"Column1", type text}, {"Column2", type text}}),
            Transposed = Table.Transpose(ChangedType),
            PromotedHeaders = Table.PromoteHeaders(Transposed, [PromoteAllScalars=true])
        in
            PromotedHeaders
    ),
    // 移除无关的元数据列
    CleanedTable = Table.RemoveColumns(ProcessTables, {"Id", "Kind", "Data"}),
    // 展开所有处理后的表格,合并为单一数据集
    CombinedTables = Table.ExpandTableColumn(CleanedTable, "ProcessedTable", 
        Table.ColumnNames(Table.First(CleanedTable[ProcessedTable]))
    )
in
    CombinedTables

代码说明

  • Source 会加载PDF中所有表格的元数据(每行对应一个表格)
  • ProcessTables 列将你原来的单表处理逻辑封装,自动应用到每个表格
  • CombinedTables 展开所有处理后的表格,完成数据合并

多PDF文件批量处理

如果需要处理文件夹下的多个PDF,只需在上述逻辑外层套一层文件遍历:

let
    // 指定PDF文件夹路径
    FolderPath = "C:\path\to\pdf-folder",
    // 加载文件夹内所有文件并筛选PDF
    SourceFiles = Folder.Files(FolderPath),
    FilteredPDFs = Table.SelectRows(SourceFiles, each [Extension] = ".pdf"),
    // 处理每个PDF内的所有表格
    ProcessEachPDF = Table.AddColumn(FilteredPDFs, "AllTables", each 
        let
            PDFSource = Pdf.Tables(File.Contents([Folder Path]&[Name]), [Implementation="1.3"]),
            ProcessTables = Table.AddColumn(PDFSource, "ProcessedTable", each 
                let
                    TableData = [Data],
                    ChangedType = Table.TransformColumnTypes(TableData,{{"Column1", type text}, {"Column2", type text}}),
                    Transposed = Table.Transpose(ChangedType),
                    PromotedHeaders = Table.PromoteHeaders(Transposed, [PromoteAllScalars=true])
                in
                    PromotedHeaders
            ),
            CleanedTable = Table.RemoveColumns(ProcessTables, {"Id", "Kind", "Data"}),
            CombinedTables = Table.ExpandTableColumn(CleanedTable, "ProcessedTable", 
                Table.ColumnNames(Table.First(CleanedTable[ProcessedTable]))
            )
        in
            CombinedTables
    ),
    // 合并所有PDF的处理结果
    FinalCombined = Table.ExpandTableColumn(ProcessEachPDF, "AllTables", 
        Table.ColumnNames(Table.First(ProcessEachPDF[AllTables]))
    ),
    // 可选:保留文件名,方便追溯数据来源
    KeepFileName = Table.SelectColumns(FinalCombined, {"Name"} & Table.ColumnNames(Table.First(ProcessEachPDF[AllTables])))
in
    KeepFileName

注意事项

  • 确保所有PDF内的表格结构完全一致,否则合并时会出现列不匹配错误
  • 若表格列名存在差异,可在PromotedHeaders后添加Table.RenameColumns统一列名
  • PDF文件更新后,只需刷新Power Query连接即可自动加载最新数据

内容的提问来源于stack exchange,提问作者Ian Robertson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 03:23:30