凊风 发表于 2025-10-24 08:45:56

Pdf转Excel求助~

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

FishC 发表于 2025-10-24 08:47:36

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


Option Explicit

Sub PDFToExcel()
    Dim folderPath As String
    Dim pdfFile As String
    Dim excelApp As Object
    Dim excelWorkbook As Object
    Dim excelWorksheet As Object
    Dim acroApp As Object
    Dim acroDoc As Object
    Dim pageCount As Integer
    Dim i As Integer
    Dim outputFileName As String
    Dim successList As String
    Dim failList As String
   
    ' 获取用户指定的文件夹路径
    With Application.FileDialog(msoFileDialogFolderPicker)
      .Title = "请选择包含PDF文件的文件夹"
      If .Show = -1 Then
            folderPath = .SelectedItems(1)
      Else
            MsgBox "未选择文件夹,操作已取消。"
            Exit Sub
      End If
    End With
   
    ' 初始化成功和失败列表
    successList = ""
    failList = ""
   
    ' 遍历文件夹中的所有PDF文件
    pdfFile = Dir(folderPath & "\*.pdf")
    Do While pdfFile <> ""
      On Error GoTo ErrorHandler
      Set acroApp = CreateObject("AcroExch.App")
      Set acroDoc = CreateObject("AcroExch.PDDoc")
      
      ' 打开PDF文件
      If acroDoc.Open(folderPath & "\" & pdfFile) Then
            pageCount = acroDoc.GetNumPages()
            
            ' 创建新的Excel工作簿
            Set excelApp = CreateObject("Excel.Application")
            Set excelWorkbook = excelApp.Workbooks.Add
            Set excelWorksheet = excelWorkbook.ActiveSheet
            excelApp.Visible = False ' 可选:隐藏Excel窗口以提高速度
            
            ' 逐页提取文本并写入Excel
            For i = 0 To pageCount - 1
                Dim page As Object
                Set page = acroDoc.AcquirePage(i)
                Dim text As String
                text = page.GetText() ' 提取页面文本
                excelWorksheet.Cells(i + 1, 1).Value = "页码 " & (i + 1)
                excelWorksheet.Cells(i + 1, 2).Value = text
            Next i
            
            ' 保存Excel文件
            outputFileName = folderPath & "\转换后" & Replace(pdfFile, ".pdf", "") & ".xlsx"
            excelWorkbook.SaveAs outputFileName
            excelWorkbook.Close
            excelApp.Quit
            
            ' 释放对象
            Set page = Nothing
            acroDoc.Close
            Set acroDoc = Nothing
            acroApp.Exit
            Set acroApp = Nothing
            
            ' 记录成功文件
            successList = successList & pdfFile & vbCrLf
      Else
            GoTo ErrorHandler
      End If
      
      pdfFile = Dir
      GoTo NextFile
      
ErrorHandler:
      ' 记录失败文件
      failList = failList & pdfFile & vbCrLf
      On Error GoTo 0
      ' 清理对象
      If Not acroDoc Is Nothing Then
            acroDoc.Close
            Set acroDoc = Nothing
      End If
      If Not acroApp Is Nothing Then
            acroApp.Exit
            Set acroApp = Nothing
      End If
      If Not excelWorkbook Is Nothing Then
            excelWorkbook.Close False
            Set excelWorkbook = Nothing
      End If
      If Not excelApp Is Nothing Then
            excelApp.Quit
            Set excelApp = Nothing
      End If
      
NextFile:
    Loop
   
    ' 显示转换结果
    Dim resultMsg As String
    resultMsg = "转换完成!" & vbCrLf & vbCrLf
    If successList <> "" Then
      resultMsg = resultMsg & "成功转换的文件:" & vbCrLf & successList & vbCrLf
    End If
    If failList <> "" Then
      resultMsg = resultMsg & "转换失败的文件:" & vbCrLf & failList
    End If
    MsgBox resultMsg
End Sub


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

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: Pdf转Excel求助~