Экспорт pdf в Excel

#excel #vba #adobe

#excel #vba #adobe

Вопрос:

В Adobe DC Pro у вас есть возможность экспортировать ваш PDF-файл в электронную таблицу Excel 2003, сначала выбрав «Экспорт PDF», затем выбрав «XML Spreadsheet 2003» и, наконец, выбрав параметр «Создать рабочий лист для каждой страницы».

Я не могу найти какой-либо код, который делает это в Excel vba.

Мой вопрос в том, как мне заставить Excel выполнить эту опцию через VBA? Простое сохранение в формате SaveAs FileFormat:=XlFileFormat.xlXMLSpreadsheet превращает его только в электронную таблицу xml, а не в «создание рабочего листа для каждой страницы», которое создает Adobe Pro.

Спасибо

Комментарии:

1. «Просто сохраните его как SaveAs » — что такое «это» в этом предложении? Вы работаете с PDF или с рабочим листом / рабочей книгой Excel?

2. Я работаю с обоими. Я хочу, чтобы Excel экспортировал pdf в xmlspreadsheet с таблицей для каждой страницы, как если бы вы хотели сделать это только через Adobe. Я могу сделать это только через Adobe Pro, я хочу, чтобы макрос Excel мог завершить это.

3. Каков источник PDF-файла?

4. Источником является Adobe Pro. Итак, есть ли какая-либо кодировка, которую я могу использовать в Excel, которая может имитировать Adobe Pro? Например, в Adobe Pro я могу экспортировать PDF в виде электронной таблицы xml 2003 и создавать рабочие листы для каждой страницы, может ли Excel сделать это как макрос?

5. Я бы предположил, что это что-то специфичное для Acrobat. Насколько я знаю, Excel не имеет возможностей преобразования PDF.

Ответ №1:

Вы можете сделать это с помощью Adobe Acrobat 10.0 Type Library reference, который поставляется с Adobe Acrobat Pro.

Вот пример:

Этот код откроет файл PDF и назначит каждую страницу PDF отдельным листам.

 
Option Explicit
Sub PDF_To_Excel()

Dim PDF_ As Acrobat.AcroPDDoc
Dim Hilight_Text As Acrobat.AcroHiliteList
Dim PDF_Page As Acrobat.AcroPDPage
Dim Page_Text As Acrobat.AcroPDTextSelect
Dim ws As Worksheet
Dim Count_Page As Long
Dim i As Long, j As Long, k As Long
Dim PDF_Text_Str As String
Dim Hold_Txt As Variant

Set PDF_ = New Acrobat.AcroPDDoc
Set Hilight_Text = New Acrobat.AcroHiliteList

Hilight_Text.Add 0, 32767

With PDF_

.Open "C:ED5049PX2.pdf"
Count_Page = .GetNumPages

For i = 1 To Count_Page

PDF_Text_Str = ""

Set PDF_Page = .AcquirePage(i - 1)
Set Page_Text = PDF_Page.CreateWordHilite(Hilight_Text)

If Not Page_Text Is Nothing Then

With Page_Text

For j = 0 To .GetNumText - 1
PDF_Text_Str = PDF_Text_Str amp; .GetText(j)
Next j

End With

End If

Set ws = Worksheets.Add(, Worksheets(Sheets.Count))

With ws
.Name = "Page-" amp; i

If PDF_Text_Str <> "" Then

Hold_Txt = Split(PDF_Text_Str, vbCrLf)

For k = 0 To UBound(Hold_Txt)

PDF_Text_Str = CStr(Hold_Txt(k))
If Left(PDF_Text_Str, 1) = "=" Then PDF_Text_Str = "'" amp; PDF_Text_Str
.Cells(k   1, 1).Value = PDF_Text_Str

Next k

Else
.Cells(1, 1).Value = "No text found in page " amp; i
End If

.Cells.Select
.Cells.EntireColumn.AutoFit

End With

Next

.Close

End With

MsgBox ("Done")

End Sub

  

Комментарии:

1. Спасибо за ваш ответ. Я попробую.

Ответ №2:

У меня все еще есть проблема с Page_Text — это ничто. Несмотря на то, что у меня открыт PDF-файл, кажется, что он не читает Page_Text. Вот код:

 .Open "C:Usertest.pdf"
Count_Page=.GetNumPages

For I=1 to Count_Page
PDF_Text_Str=""
Set PDF_Page=.AcquirePage(i-1)
Set Page_Text=PDF_Page.CreateWordHilite(Hilight_Text)
If Not Page_Text is Nothing then
With Page_Text
For j=0 to .GetNumText  -1
PDF_Text_Str=PDF_Text_Str amp; .GetText(j)
Next j
End With
End if
  

Спасибо