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

Power Query高效处理PDF多重复表格:转置后合并为单表

高效解决方案:批量处理PDF重复表格并合并

方案1:封装转换逻辑为自定义函数,批量应用到所有PDF表格

这是最直接的解决方式,避免手动复制查询的重复劳动:

  1. 封装单个表格的转换逻辑为自定义函数

    • 先完成单个表格的完整转换(转置、提取字段、删冗余行),打开Advanced Editor,将代码修改为函数格式:
      (inputTable as table) as table =>
      let
          TransposedTable = Table.Transpose(inputTable),
          PromotedHeaders = Table.PromoteHeaders(TransposedTable, [PromoteAllScalars=true]),
          AddedAccount = Table.AddColumn(PromotedHeaders, "Account", each [report.field("Account")]),
          AddedAmount = Table.AddColumn(PromotedHeaders, "Amount", each [report.field("Amount")]),
          RemovedRedundant = Table.SelectColumns(AddedAmount, {"Account", "Amount"})
      in
          RemovedRedundant
      
    • 将这个查询保存为自定义函数(比如命名为fn_TransformSingleTable)。
  2. 批量导入PDF所有页面的表格并应用函数

    • 新建查询,导入目标PDF:
      let
          Source = Pdf.Tables(File.Contents("C:\你的文件路径\目标文件.pdf"), [Implementation="1.3"]),
          // 提取所有页面的表格列表
          AllTables = Source{[Name="Table"]}[Data][[Table]],
          // 对每个表格应用自定义转换函数
          TransformedTables = List.Transform(AllTables, fn_TransformSingleTable),
          // 合并所有转换后的表格为单表
          CombinedResult = Table.Combine(TransformedTables)
      in
          CombinedResult
      
    • 运行查询后直接得到合并好的数据库表。

方案2:处理整份PDF导入后的表头分列问题

如果导入整份PDF得到的是一个大表但表头分列,可以先拆分再转换:

  1. 拆分大表为每页子表

    • 先给大表添加索引列,根据每页的固定行数拆分:
      let
          Source = Pdf.Tables(File.Contents("C:\你的文件路径\目标文件.pdf"), [Implementation="1.3"]),
          FullTable = Source{[Name="Table"]}[Data],
          AddedIndex = Table.AddIndexColumn(FullTable, "Index", 0, 1),
          // 假设每页表格占10行,按行数拆分列表
          SplitTables = List.Split(AddedIndex[#"Column1"], 10),
          // 转换列表为表格集合
          TableCollection = List.Transform(SplitTables, (x) => Table.FromList(x, Splitter.SplitByNothing(), null, null, ExtraValues.Error))
      in
          TableCollection
      
  2. 应用自定义函数合并

    • 直接用方案1中的fn_TransformSingleTable对TableCollection列表做转换,再用Table.Combine合并即可。

注意事项

  • 如果PDF中存在少量结构不一致的表格,可在自定义函数中添加容错判断,比如用Table.HasColumns检查必要字段是否存在,避免转换报错。
  • 调整Pdf.Tables的参数(如StartPage/EndPage)可指定处理的页码范围,提升效率。

内容的提问来源于stack exchange,提问作者Chris Casselli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 02:13:13