鱼C论坛

 找回密码
 立即注册
查看: 33|回复: 1

Pdf转Excel求助~

[复制链接]
发表于 昨天 08:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

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

x
请问能不能用VB宏编写:
   1、让用户指定一文件夹;
   2、逐一识别该文件夹下所有PDf文件,然后逐个PDF、逐页、逐行识别每一个PDF下所有文字和图片,把所有识别出来的内容按原页码存入“转换后+原文件名”.excel中;
   3、“转换后+原文件名”.excel亦存入用户之前所指定的文件夹中;
   4、列出转换成功了哪些PDF,失败了哪些PDF.
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 昨天 08:47 | 显示全部楼层
以下是一个使用VBA宏实现PDF转Excel功能的示例代码。请注意,此代码依赖于Adobe Acrobat(完整版,而非Reader)的对象库来提取PDF内容。如果未安装Adobe Acrobat,宏可能无法正常运行。此外,图片提取功能较为复杂,本示例仅实现文本提取;如需图片提取,可能需要额外工具或库。


  1. Option Explicit

  2. Sub PDFToExcel()
  3.     Dim folderPath As String
  4.     Dim pdfFile As String
  5.     Dim excelApp As Object
  6.     Dim excelWorkbook As Object
  7.     Dim excelWorksheet As Object
  8.     Dim acroApp As Object
  9.     Dim acroDoc As Object
  10.     Dim pageCount As Integer
  11.     Dim i As Integer
  12.     Dim outputFileName As String
  13.     Dim successList As String
  14.     Dim failList As String
  15.    
  16.     ' 获取用户指定的文件夹路径
  17.     With Application.FileDialog(msoFileDialogFolderPicker)
  18.         .Title = "请选择包含PDF文件的文件夹"
  19.         If .Show = -1 Then
  20.             folderPath = .SelectedItems(1)
  21.         Else
  22.             MsgBox "未选择文件夹,操作已取消。"
  23.             Exit Sub
  24.         End If
  25.     End With
  26.    
  27.     ' 初始化成功和失败列表
  28.     successList = ""
  29.     failList = ""
  30.    
  31.     ' 遍历文件夹中的所有PDF文件
  32.     pdfFile = Dir(folderPath & "\*.pdf")
  33.     Do While pdfFile <> ""
  34.         On Error GoTo ErrorHandler
  35.         Set acroApp = CreateObject("AcroExch.App")
  36.         Set acroDoc = CreateObject("AcroExch.PDDoc")
  37.         
  38.         ' 打开PDF文件
  39.         If acroDoc.Open(folderPath & "" & pdfFile) Then
  40.             pageCount = acroDoc.GetNumPages()
  41.             
  42.             ' 创建新的Excel工作簿
  43.             Set excelApp = CreateObject("Excel.Application")
  44.             Set excelWorkbook = excelApp.Workbooks.Add
  45.             Set excelWorksheet = excelWorkbook.ActiveSheet
  46.             excelApp.Visible = False ' 可选:隐藏Excel窗口以提高速度
  47.             
  48.             ' 逐页提取文本并写入Excel
  49.             For i = 0 To pageCount - 1
  50.                 Dim page As Object
  51.                 Set page = acroDoc.AcquirePage(i)
  52.                 Dim text As String
  53.                 text = page.GetText() ' 提取页面文本
  54.                 excelWorksheet.Cells(i + 1, 1).Value = "页码 " & (i + 1)
  55.                 excelWorksheet.Cells(i + 1, 2).Value = text
  56.             Next i
  57.             
  58.             ' 保存Excel文件
  59.             outputFileName = folderPath & "\转换后" & Replace(pdfFile, ".pdf", "") & ".xlsx"
  60.             excelWorkbook.SaveAs outputFileName
  61.             excelWorkbook.Close
  62.             excelApp.Quit
  63.             
  64.             ' 释放对象
  65.             Set page = Nothing
  66.             acroDoc.Close
  67.             Set acroDoc = Nothing
  68.             acroApp.Exit
  69.             Set acroApp = Nothing
  70.             
  71.             ' 记录成功文件
  72.             successList = successList & pdfFile & vbCrLf
  73.         Else
  74.             GoTo ErrorHandler
  75.         End If
  76.         
  77.         pdfFile = Dir
  78.         GoTo NextFile
  79.         
  80. ErrorHandler:
  81.         ' 记录失败文件
  82.         failList = failList & pdfFile & vbCrLf
  83.         On Error GoTo 0
  84.         ' 清理对象
  85.         If Not acroDoc Is Nothing Then
  86.             acroDoc.Close
  87.             Set acroDoc = Nothing
  88.         End If
  89.         If Not acroApp Is Nothing Then
  90.             acroApp.Exit
  91.             Set acroApp = Nothing
  92.         End If
  93.         If Not excelWorkbook Is Nothing Then
  94.             excelWorkbook.Close False
  95.             Set excelWorkbook = Nothing
  96.         End If
  97.         If Not excelApp Is Nothing Then
  98.             excelApp.Quit
  99.             Set excelApp = Nothing
  100.         End If
  101.         
  102. NextFile:
  103.     Loop
  104.    
  105.     ' 显示转换结果
  106.     Dim resultMsg As String
  107.     resultMsg = "转换完成!" & vbCrLf & vbCrLf
  108.     If successList <> "" Then
  109.         resultMsg = resultMsg & "成功转换的文件:" & vbCrLf & successList & vbCrLf
  110.     End If
  111.     If failList <> "" Then
  112.         resultMsg = resultMsg & "转换失败的文件:" & vbCrLf & failList
  113.     End If
  114.     MsgBox resultMsg
  115. End Sub
复制代码


**使用说明:**
1. 在Excel中,按 Alt + F11 打开VBA编辑器。
2. 在工具菜单中,选择“引用”,然后勾选 Adobe Acrobat 或类似对象库(具体名称可能因版本而异)。
3. 将上述代码粘贴到一个新模块中。
4. 运行宏 PDFToExcel,按照提示选择文件夹。

**注意事项:**
- 此代码仅提取文本,不处理图片。如需图片提取,可能需要使用Adobe Acrobat的JavaScript或其他第三方库。
- 确保PDF文件未被其他程序占用,否则可能导致失败。
- 转换速度取决于PDF大小和数量,建议先测试少量文件。

如果遇到问题,请检查Adobe Acrobat安装及引用设置。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-25 01:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表