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

如何通过PowerQuery批量提取不同位置的PDF银行对账单表格至Excel?

批量提取不同位置PDF银行对账单表格的解决方案

方法一:PowerQuery自定义函数识别表格特征

利用表格格式大致统一的特点,通过表头关键词、列数或特定字段作为识别标志,编写自定义函数遍历每个PDF的所有表格,自动筛选出目标表格后合并。

步骤:

  1. 在Excel中打开PowerQuery编辑器,新建空白查询;
  2. 粘贴以下自定义函数(根据实际对账单表头修改关键词):
// 自定义函数:提取PDF中符合特征的目标表格
let
    ExtractTargetTable = (pdfPath as text) as table =>
    let
        // 读取PDF所有页面的表格数据
        AllTables = Pdf.Tables(pdfPath, [Implementation="1.3"]),
        // 筛选包含目标表头的表格(示例:表头含"交易日期"和"发生金额")
        TargetTables = Table.SelectRows(AllTables, each 
            List.Contains(Table.ColumnNames([Table]), "交易日期") and 
            List.Contains(Table.ColumnNames([Table]), "发生金额")
        ),
        // 合并当前PDF的所有目标表格
        CombinedTable = Table.Combine(TargetTables[Table])
    in
        CombinedTable
in
    ExtractTargetTable
  1. 新建查询获取目标文件夹的所有PDF文件列表(路径);
  2. 为文件列表添加自定义列,调用上述ExtractTargetTable函数,传入每个文件的路径;
  3. 展开自定义列中的表格数据,完成批量合并。

注意:如果部分PDF的表头有细微差异(比如“交易日期”写成“交易日”),可以用List.ContainsAny或模糊匹配调整筛选逻辑。

方法二:预处理PDF统一表格位置

如果PDF数量不多,可先通过PDF工具批量整理,让目标表格固定在某一页:

  • 用Adobe Acrobat的「动作向导」创建批量处理动作,自动定位每个PDF中包含目标表头的页面,将该页面单独导出为新PDF;
  • 之后直接用PowerQuery批量提取新文件夹中所有PDF的第1页表格即可。

方法三:VBA+PowerQuery精准定位页面

通过VBA遍历PDF,先定位目标表格所在的页面编号,再让PowerQuery按指定页面提取:

  1. 编写VBA代码(需引用Adobe Acrobat库),遍历文件夹中所有PDF,查找包含目标关键词的页面,生成含「文件路径+页面编号」的Excel列表;
Sub GetPDFTablePage()
    Dim acroApp As Object, acroDoc As Object
    Dim folderPath As String, fileName As String
    Dim pageNum As Integer, totalPages As Integer
    Dim textContent As String
    Dim ws As Worksheet
    
    Set ws = ThisWorkbook.Sheets("Sheet1")
    folderPath = "C:\你的PDF文件夹路径\"
    fileName = Dir(folderPath & "*.pdf")
    
    Set acroApp = CreateObject("AcroExch.App")
    
    Do While fileName <> ""
        Set acroDoc = CreateObject("AcroExch.PDDoc")
        If acroDoc.Open(folderPath & fileName) Then
            totalPages = acroDoc.GetNumPages()
            For pageNum = 0 To totalPages - 1
                textContent = acroDoc.GetPage(pageNum).GetText
                ' 匹配目标表头关键词,比如"交易日期"
                If InStr(textContent, "交易日期") > 0 Then
                    ws.Cells(ws.Rows.Count, 1).End(xlUp).Offset(1, 0) = folderPath & fileName
                    ws.Cells(ws.Rows.Count, 2).End(xlUp).Offset(1, 0) = pageNum + 1 ' 页面号从1开始
                    Exit For
                End If
            Next pageNum
            acroDoc.Close
        End If
        fileName = Dir()
    Loop
    
    acroApp.Exit
    Set acroDoc = Nothing
    Set acroApp = Nothing
    MsgBox "页面编号提取完成"
End Sub
  1. 在PowerQuery中读取这个列表,添加自定义列,用Pdf.Tables指定页面编号提取表格:
Pdf.Tables([文件路径], [Implementation="1.3", Pages={[页面编号]}])
  1. 展开并合并所有表格即可。

内容的提问来源于stack exchange,提问作者Daniel Sanderson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 05:30:06