gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:00:40 25 4
gpt4 key购买 nike

我正在尝试将 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com