excel - 从 PDF 中提取数据并添加到工作表

标签 excel vba pdf

我正在尝试将 PDF 文档中的数据提取到工作表中。 PDF 显示和文本可以手动复制并粘贴到 Excel 文档中。

我目前正在通过 SendKeys 执行此操作,但它不起作用。当我尝试粘贴 PDF 文档中的数据时出现错误。为什么我的粘贴不起作用?如果我在宏停止运行后粘贴,它会正常粘贴。

Dim myPath As String, myExt As String
Dim ws As Worksheet
Dim openPDF As Object
'Dim pasteData As MSForms.DataObject
Dim fCell As Range

'Set pasteData = New MSForms.DataObject
Set ws = Sheets("DATA")
If ws.Cells(ws.Rows.Count, "A").End(xlUp).Row > 1 Then Range("A3:A" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row).ClearContents

myExt = "\*.pdf"
'When Scan Receipts Button Pressed Scan the selected folder/s for receipts
For Each fCell In Range(ws.Cells(1, 1), ws.Cells(1, ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column))
    myPath = Dir(fCell.Value & myExt)
    Do While myPath <> ""
        myPath = fCell.Value & "\" & myPath
        Set openPDF = CreateObject("Shell.Application")
        openPDF.Open (myPath)
        Application.Wait Now + TimeValue("00:00:2")
        SendKeys "^a"
        Application.Wait Now + TimeValue("00:00:2")
        SendKeys "^c"
        'Application.Wait Now + TimeValue("00:00:2")
        ws.Select
        ActiveSheet.Paste
        'pasteData.GetFromClipboard

        'ws.Cells(3, 1) = pasteData.GetText
        Exit Sub

        myPath = Dir
    Loop

Next fCell

最佳答案

您可以使用 Adob​​e 库打开 PDF 文件并提取其内容(我相信您可以作为 SDK 的一部分从 Adob​​e 下载该库,但它也随某些版本的 Acrobat 一起提供)

请确保将库也添加到您的引用中(在我的计算机上,它是 Adob​​e Acrobat 10.0 类型库,但不确定这是否是最新版本)

即使使用 Adob​​e 库,它也不是微不足道的(您需要添加自己的错误捕获等):

Function getTextFromPDF(ByVal strFilename As String) As String
   Dim objAVDoc As New AcroAVDoc
   Dim objPDDoc As New AcroPDDoc
   Dim objPage As AcroPDPage
   Dim objSelection As AcroPDTextSelect
   Dim objHighlight As AcroHiliteList
   Dim pageNum As Long
   Dim strText As String

   strText = ""
   If (objAvDoc.Open(strFilename, "") Then
      Set objPDDoc = objAVDoc.GetPDDoc
      For pageNum = 0 To objPDDoc.GetNumPages() - 1
         Set objPage = objPDDoc.AcquirePage(pageNum)
         Set objHighlight = New AcroHiliteList
         objHighlight.Add 0, 10000 ' Adjust this up if it's not getting all the text on the page
         Set objSelection = objPage.CreatePageHilite(objHighlight)

         If Not objSelection Is Nothing Then
            For tCount = 0 To objSelection.GetNumText - 1
               strText = strText & objSelection.GetText(tCount)
            Next tCount
         End If
      Next pageNum
      objAVDoc.Close 1
   End If

   getTextFromPDF = strText

End Function

它所做的基本上与您尝试做的事情相同 - 只使用 Adob​​e 自己的库。它一次浏览 PDF 一页,突出显示页面上的所有文本,然后将其(一次一个文本元素)放入字符串中。

请记住,您从中得到的内容可能充满了各种非打印字符(换行符、换行符等),这些字符甚至可能最终出现在看起来像连续文本 block 的中间,因此您可以在使用它之前需要额外的代码来清理它。

希望有帮助!

关于excel - 从 PDF 中提取数据并添加到工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36270247/

相关文章:

vba - 用于多个条件的 Excel VBA 嵌套案例函数

pdf - PDF 屏幕阅读器

pdf - 如何从 Qt 应用程序创建 pdf 文件?

excel - 在 Excel 中使用 MS Query 查询自身(不是外部源)

vba - 如何在excel宏中的代码块之间跳转?

excel - 将 Excel 文件读入 Access 数据库的最佳方法

vba - Range SpecialCells ClearContents 改为清除整个工作表

vba - Excel VBA web 源代码 - 如何将多个字段提取到一张表中

c# - 如何导出到 Excel?

php - 如何使用 PHP 从 PDF 文件访问元数据信息?