如何通过Excel VBA将PDF数据导入Excel 无需使用任何外部程序
仅依托Excel原生功能提取PDF数据的实现方案
原SendKeys模拟按键方案存在本质缺陷:运行时强依赖窗口焦点,用户误触按键、切换窗口都会直接中断流程,固定时长等待的逻辑在不同性能设备上适配性极差,不具备生产可用性。
以下方案均不依赖任何第三方软件(含Adobe类工具),全程本地运行满足数据敏感性要求,且无SendKeys调用稳定性问题。
方案1:无代码操作(适配Excel 365/2021及以上版本)
该功能为Excel原生内置组件,无需编写代码即可完成提取:
- 打开目标Excel工作簿,切换到顶部菜单栏「数据」选项卡
- 依次点击「获取数据 > 来自文件 > 来自PDF」
- 在弹出的文件选择窗口选中需要提取的目标PDF文件,确认导入
- 在导航器面板中选择需要提取的PDF页面、表格对象,可点击「转换数据」提前完成格式规整,确认后点击「加载」即可将数据直接导入指定工作表
*该功能所有解析、导入动作均在本地Excel环境内完成,不会向外传输任何文件内容,完全满足敏感数据处理要求。
方案2:VBA稳定实现方案(兼容全版本Excel,支持批量处理)
该方案依托Office同套件自带的Word原生PDF解析能力,全程后台运行,不抢占窗口焦点,用户操作键鼠完全不会中断流程,无需安装任何额外软件。
代码采用后期绑定写法,不需要手动配置引用,直接导入VBA编辑器即可运行:
Sub ExtractPDFToExcel() Dim ws As Worksheet Dim wordApp As Object Dim wordDoc As Object Dim fso As Object Dim myPath As String, targetFolder As String Dim fCell As Range Dim lastRow As Long ' 初始化目标工作表 Set ws = ThisWorkbook.Sheets("DATA") lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row If lastRow > 2 Then ws.Range("A3:A" & lastRow).ClearContents ' 初始化后台对象,全程不弹出可见窗口 Set fso = CreateObject("Scripting.FileSystemObject") Set wordApp = CreateObject("Word.Application") wordApp.Visible = False wordApp.DisplayAlerts = 0 ' 遍历第一行配置的所有目标文件夹 For Each fCell In ws.Range(ws.Cells(1, 1), ws.Cells(1, ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column)) targetFolder = fCell.Value If targetFolder <> "" And fso.FolderExists(targetFolder) Then myPath = Dir(fso.BuildPath(targetFolder, "*.pdf")) Do While myPath <> "" ' 后台调用Word原生能力解析PDF Set wordDoc = wordApp.Documents.Open( _ FileName:=fso.BuildPath(targetFolder, myPath), _ ConfirmConversions:=False, _ ReadOnly:=True, _ AddToRecentFiles:=False, _ Format:=0) ' 提取全量文本粘贴到工作表 wordDoc.Content.Copy ws.Cells(ws.Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues ' 关闭当前文档释放资源 wordDoc.Close SaveChanges:=False myPath = Dir Loop End If Next fCell ' 退出后台Word进程,清理对象 wordApp.Quit SaveChanges:=False Set wordDoc = Nothing Set wordApp = Nothing Set fso = Nothing Application.CutCopyMode = False MsgBox "PDF数据提取完成", vbInformation End Sub
代码优化提示
- 如果需要提取结构化表格而非纯文本,可遍历
wordDoc.Tables集合按单元格对应写入Excel,大幅降低后续数据整理成本 - 可根据需要调整粘贴起始位置、提取内容范围,适配不同的表格结构要求
- 代码无固定等待时长,解析完成后自动执行下一步,运行效率远高于原SendKeys方案
内容的提问来源于stack exchange,提问作者Lopeker
相关产品推荐
相关产品推荐

