当前位置: 首页 > 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)》

http://www.xdnf.cn/news/369613.html

相关文章:

  • SpringBoot框架名字的由来
  • CentOS 7 修改锁屏时间为永不
  • arXiv2025 | TTRL: Test-Time Reinforcement Learning
  • 数据库中的 Segment、Extent、Page、Row 详解
  • Java 开发者 Linux 学习指南
  • Lingma:云效 MCP 使用
  • Java【网络原理】(5)深入浅出HTTPS:状态码与SSL/TLS加密全解析
  • 【前端】每日一道面试题3:如何实现一个基于CSS Grid的12列自适应布局?
  • 《算法导论(第4版)》阅读笔记:p17-p27
  • 8.2.CICD自动化
  • 一种运动平台扫描雷达超分辨成像视场选择方法——论文阅读
  • 金融学知识笔记
  • MindSpore框架学习项目-ResNet药物分类-模型训练
  • 【RAG-十 一-检索增强技术之迭代增强】
  • 【Linux系统】从零开始构建简易 Shell:从输入处理到命令执行的深度剖析
  • 【金仓数据库征文】金仓数据库KingbaseES: 技术优势与实践指南(包含安装)
  • 基础语法(二)
  • 【基于 LangChain 的异步天气查询3】OpenWeather实现实时天气查询
  • 离线化 Service Worker
  • HTTP、HTTPS、SSH区别以及如何使用ssh-keygen生成密钥对
  • 【C++】红黑树
  • Flink和Spark的选型
  • 从父类到子类:C++ 继承的奇妙旅程(2)
  • 【现代深度学习技术】注意力机制04:Bahdanau注意力
  • SwarmUI:基于.Net开发的开源AI 图像生成 Web 用户界面系统
  • GPT-4o, GPT 4.5, GPT 4.1, O3, O4-mini等模型的区别与联系
  • n8n系列(5):LangChain与大语言模型应用
  • Vue3 怎么在ElMessage消息提示组件中添加自定义icon图标
  • 【 Redis | 实战篇 缓存 】
  • VS小技巧:如何在一个项目中添加其他项目