如果PDF文件肯定是表格而不是表格的图像,那么我会使用Word打开文件并将Word文件中的数据提取到excel中。您还应该能够检查表中的值是否正确排列 - 如果不是,则错误在于原始 PDF 创建,而不是您提取的内容。
我现在只有 Office XP 可用,因此未测试此代码,但类似的内容应该可以在较新的版本中使用。
基本上它会:
询问您希望从哪个 Word 或 PDF 文件中提取表格
- 您选择文件
它会将文档内容粘贴到 sheet1(您可以将其删除)
它将创建一个新工作表并逐个单元格提取表格内容
对文档中的每个表重复
(因此,文档中的每个表格都将位于单独的工作表中)
Sub ImportPDFTable()
Dim wdDoc As Object
Dim wdFileName As Variant
Dim wrd As Object
Dim ApplicationIsRunning As Object
Dim IsWordRunning As Boolean
Dim TableNo As Integer
Dim iRow As Long, iCol As Integer, iCount As Integer
wdFileName = Application.GetOpenFilename("PDF files,*.pdf,Word files,*.doc*", , _
"Browse for file containing table to be imported")
If wdFileName = False Then Exit Sub '(user cancelled import file browser)
Set wrd = CreateObject("Word.Application")
Set wdDoc = wrd.Documents.Open(wdFileName) 'open PDF file in Word
wrd.Visible = False
wrd.Selection.WholeStory
wrd.Selection.Copy
ActiveSheet.PasteSpecial Format:="Text" 'optional - pastes whole document for easy checking
Range("A1").Select
With wdDoc
TableNo = wdDoc.tables.Count
If TableNo = 0 Then MsgBox "This document contains no tables", vbExclamation, "Import Word Table"
For iCount = 1 To TableNo
Worksheets.Add
'Range("A:M").NumberFormat = "@"
TableNo = iCount
With .tables(TableNo)
'copy cell contents from Word table cells to Excel cells
For iRow = 1 To .Rows.Count
For iCol = 1 To .Columns.Count
On Error Resume Next
Cells(iRow, iCol) = WorksheetFunction.Clean(.cell(iRow, iCol).Range.Text)
Next iCol
Next iRow
End With
Next iCount
End With
Set wdDoc = Nothing
wrd.Quit
Set wrd = Nothing
End Sub
希望这个有用。
编辑:几乎忘记了查询的最后一部分。
importhtml 不是我熟悉的 Excel 公式/函数。可能您看到了某人创建的自定义函数?我相信 Google 表格确实有一个公式名称 importhtml,但我很少使用该软件。