如何将pdf表转换为excel而没有混乱的列?

时间:2017-07-21 21:07:23

标签: excel vba excel-vba pdf

我有一个pdf文件,其中包含我在下面附加的表格,我正在尝试将其转换为Excel表格。我首先将pdf保存为html并在Excel中使用import html导入表格。但是有些列没有对齐。例如,“FROM”应位于“1”之上,“TO”应位于“2”之上,“FIELD”应位于“S0CCO”之上。但你可以看到它们在Excel中有点混乱。

这只是一个例子,我有大量的这样的表格,所以我不能手动调整一切。所以我有几个问题:

  1. 任何调整方式,以便所有列都自动放在正确的位置?
  2. 有没有其他方法可以将带有很多表格的pdf文件转换为带有右列的Excel?
  3. 这是无关紧要的,但我尝试使用Excel formula = importhtml(url,“table”,index)来转换此表。任何人都能解释这个公式对我的意义吗?我怎么能告诉公式的第二部分是表格还是列表?什么指数意味着什么?
  4. 非常感谢!

    pic1 pic2

1 个答案:

答案 0 :(得分:0)

如果PDF文件肯定是表而不是表的图像,那么我将使用Word打开文件并从Word文件中提取数据以获得优秀。您还应该能够检查表中的值是否正确排列 - 如果没有,那么错误在于原始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,但我很少使用该软件。