当前位置: 首页 > news >正文

VBA将PDF文档内容逐行写入Excel

        VBA是无法直接读取PDF文档的,但结合上期我给大家介绍了PDF转换工具xpdf-tools-4.05,先利用它将PDF文档转换为TXT文档,然后再将TXT的内容写入Excel,这样就间接实现了将PDF文档的内容导入Excel的操作。下面的代码将向大家演示如何实现这一操作:

Sub Import_PDF_File()
'
' 导入PDF文档
'Dim pdftotext As Stringpdftotext = "C:\Program Files (x86)\xpdf-tools\bin32\pdftotext.exe"Dim fd As fileDialogDim filePath As String' 文件选择对话框Set fd = Application.fileDialog(msoFileDialogFilePicker)With fd.Title = "选择PDF文件".InitialFileName = UserDirectory  ' 设置默认路径.Filters.Clear.Filters.Add "PDF文件", "*.pdf".AllowMultiSelect = FalseIf .Show <> -1 Then Exit SubfilePath = .SelectedItems(1)End WithCells.ClearContents    ' 清除所有数据Application.ScreenUpdating = False    ' 禁用屏幕更新Dim InputFile As String, OutputFile As StringInputFile = filePathOutputFile = Left(filePath, Len(filePath) - 4) & ".txt"' 转换PDF为TXT文档Dim shellCommand As StringshellCommand = pdftotext & " -layout -enc UTF-8 """ & InputFile & """ """ & OutputFile & """"Shell shellCommand, vbHide' 等待转换完成Application.Wait Now + TimeValue("00:00:02")Dim txtPath As StringtxtPath = OutputFileIf UTF8TOANSI(txtPath) = False Then MsgBox "转换ANSI编码失败" & txtPath, vbCritical, "错误"Dim TxtPathANSI As StringTxtPathANSI = Left(txtPath, Len(txtPath) - 4) & "_ANSI.txt"' 读取文本文件Dim i As LongDim Line As StringDim LineNum As LongDim symbols As StringOpen TxtPathANSI For Input As #1i = 0Do While Not EOF(1)Line Input #1, Linei = i + 1Cells(i, 1).Value = LineLineNum = iLoopClose #1' 删除临时文件Kill txtPathKill TxtPathANSIColumns("A:A").SelectWith Selection.HorizontalAlignment = xlLeft   ' 左对齐End WithRange("A1").SelectApplication.ScreenUpdating = True    ' 启用屏幕更新MsgBox "成功导入 " & LineNum & " 行数据。", vbInformation, "提示"End Sub

        该操作只适合文字版的PDF,不适合图片版的PDF,也就是说如果你的PDF是使用扫描仪生成的那该方法不适合。另外,导入txt文档需要使用UTF8TOANSI函数将UTF8编码转换为ANSI编码,否则可能导入的是乱码,关于该函数的使用方法详见《 VBA转换TXT文档编码(UTF-8转换为ANSI)》

相关文章:

  • OpenLayers根据任意数量控制点绘制贝塞尔曲线
  • Lua—元表(Metatable)
  • c++——二叉树进阶
  • vue 中的ref
  • 多线程 2 - 死锁问题
  • c#建筑行业财务流水账系统软件可上传记账凭证财务管理系统签核功能
  • MindSpore框架学习项目-ResNet药物分类-模型优化
  • CSS渲染性能优化
  • STM32实现九轴IMU的卡尔曼滤波
  • 阿里云购买ECS 安装redis mysql nginx jdk 部署jar 部署web
  • STM32-ADC模数转换器(7)
  • 数据链共享:从印巴空战到工业控制的跨越性应用
  • Axure :基于中继器的列表删除 、 列表编辑
  • 深入理解 TCP:重传机制、滑动窗口、流量控制与拥塞控制
  • arXiv2025 | TTRL: Test-Time Reinforcement Learning
  • CDGP数据治理主观题评分标准与得分策略
  • Linux平台下SSH 协议克隆Github远程仓库并配置密钥
  • ui组件二次封装(vue)
  • Android 关闭Activity切换过渡动画
  • uniapp-商城-50-后台 商家信息
  • 伊朗外长称正与美国进行“善意”的会谈
  • 4月证券私募产品备案量创23个月新高,股票策略占比超六成
  • 融创中国:今年前4个月销售额约112亿元
  • 中国海警依法驱离日非法进入我钓鱼岛领海船只
  • 湖北奥莱斯轮胎公司逃避监管排放大气污染物被罚25万元
  • 中邮保险斥资8.69亿元举牌东航物流,持股比例达5%