Извлечь таблицу PDF и вставить в Excel

У меня есть файл PDF, содержащий таблицу. Я хочу использовать Excel-VBA для поиска только первого столбца для массива значений. На данный момент у меня есть решение проблемы. Я преобразовал PDF в текстовый файл и искал его так. Проблема в том, что иногда эти значения можно найти в нескольких столбцах, и я не могу сказать, в каком именно. Я ТОЛЬКО хочу, чтобы это было в первом столбце.

Когда PDF конвертируется в текст, он преобразует его таким образом, что для каждой части информации существует непредсказуемое количество строк, поэтому я не могу преобразовать ее обратно в таблицу в листе excel в зависимости от количества строк ( поверьте, я попробовал). Текущий метод ищет каждую строку, и если он видит совпадение, он проверяет, имеют ли две строки одинаковые длины. Но, как я уже упоминал ранее (в редком случае, но это происходит), в столбце будет столбец, который НЕ является столбцом, в котором я хочу выполнить поиск. Итак, мне интересно, есть ли способ извлечь один столбец из PDF? Или даже всю таблицу в ее нынешнем виде?

Public Sub checkNPCClist()

Dim lines As String
Dim linesArr() As String
Dim line As Variant
Dim these As String

lines = Sheet2.Range("F104").Value & ", " & Sheet2.Range("F105").Value & ", " & Sheet2.Range("F106").Value & ", " & Sheet2.Range("F107").Value

linesArr() = Split(lines, ",")
For Each line In linesArr()
    If line <> " " Then
        If matchlinename(CStr(line)) = True Then these = these & Trim(CStr(line)) & ", "
    End If
Next line

If these <> "" Then
    Sheet2.Range("H104").Value = Left(these, Len(these) - 2)
Else: Sheet2.Range("H104").Value = "Nope, none."
End If

End Sub

Function matchlinename(lookfor As String) As Boolean

Dim filename As String
Dim textdata As String
Dim textrow As String
Dim fileno As Integer
Dim temp As String
fileno = FreeFile

filename = "C:\Users\...filepath"

lookfor = Trim(lookfor)

Open filename For Input As #fileno

Do While Not EOF(fileno)
    temp = textrow
    Line Input #fileno, textrow
    If InStr(1, textrow, lookfor, vbTextCompare) Then
        If Len(Trim(textrow)) = Len(lookfor) Then
            Close #fileno
            matchlinename = True
            GoTo endthis
        End If
    End If
    'Debug.Print textdata
Loop

Close #fileno
matchlinename = False
endthis:
End Function
+2
источник поделиться

Посмотрите другие вопросы по меткам или Задайте вопрос