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

打印 上一主题 下一主题

主题 1933|帖子 1933|积分 5799

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
        VBA是无法直接读取PDF文档的,但联合上期我给各人介绍了PDF转换工具xpdf-tools-4.05,先利用它将PDF文档转换为TXT文档,然后再将TXT的内容写入Excel,这样就间接实现了将PDF文档的内容导入Excel的利用。下面的代码将向各人演示怎样实现这一利用:
  1. Sub Import_PDF_File()
  2. '
  3. ' 导入PDF文档
  4. '
  5.     Dim pdftotext As String
  6.     pdftotext = "C:\Program Files (x86)\xpdf-tools\bin32\pdftotext.exe"
  7.    
  8.     Dim fd As fileDialog
  9.     Dim filePath As String
  10.    
  11.     ' 文件选择对话框
  12.     Set fd = Application.fileDialog(msoFileDialogFilePicker)
  13.     With fd
  14.         .Title = "选择PDF文件"
  15.         .InitialFileName = UserDirectory  ' 设置默认路径
  16.         .Filters.Clear
  17.         .Filters.Add "PDF文件", "*.pdf"
  18.         .AllowMultiSelect = False
  19.         If .Show <> -1 Then Exit Sub
  20.         filePath = .SelectedItems(1)
  21.     End With
  22.    
  23.     Cells.ClearContents    ' 清除所有数据
  24.    
  25.     Application.ScreenUpdating = False    ' 禁用屏幕更新
  26.    
  27.     Dim InputFile As String, OutputFile As String
  28.     InputFile = filePath
  29.     OutputFile = Left(filePath, Len(filePath) - 4) & ".txt"
  30.     ' 转换PDF为TXT文档
  31.     Dim shellCommand As String
  32.     shellCommand = pdftotext & " -layout -enc UTF-8 """ & InputFile & """ """ & OutputFile & """"
  33.     Shell shellCommand, vbHide
  34.     ' 等待转换完成
  35.     Application.Wait Now + TimeValue("00:00:02")
  36.    
  37.     Dim txtPath As String
  38.     txtPath = OutputFile
  39.     If UTF8TOANSI(txtPath) = False Then MsgBox "转换ANSI编码失败" & txtPath, vbCritical, "错误"
  40.     Dim TxtPathANSI As String
  41.     TxtPathANSI = Left(txtPath, Len(txtPath) - 4) & "_ANSI.txt"
  42.     ' 读取文本文件
  43.     Dim i As Long
  44.     Dim Line As String
  45.     Dim LineNum As Long
  46.     Dim symbols As String
  47.     Open TxtPathANSI For Input As #1
  48.         i = 0
  49.         Do While Not EOF(1)
  50.             Line Input #1, Line
  51.             i = i + 1
  52.             Cells(i, 1).Value = Line
  53.             LineNum = i
  54.         Loop
  55.     Close #1
  56.     ' 删除临时文件
  57.     Kill txtPath
  58.     Kill TxtPathANSI
  59.     Columns("A:A").Select
  60.     With Selection
  61.         .HorizontalAlignment = xlLeft   ' 左对齐
  62.     End With
  63.     Range("A1").Select
  64.    
  65.     Application.ScreenUpdating = True    ' 启用屏幕更新
  66.    
  67.     MsgBox "成功导入 " & LineNum & " 行数据。", vbInformation, "提示"
  68. End Sub
复制代码
        该利用只得当文字版的PDF,不得当图片版的PDF,也就是说如果你的PDF是使用扫描仪天生的那该方法不得当。别的,导入txt文档必要使用UTF8TOANSI函数将UTF8编码转换为ANSI编码,否则大概导入的是乱码,关于该函数的使用方法详见《 VBA转换TXT文档编码(UTF-8转换为ANSI)》

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

西河刘卡车医

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表