Извлечь данные из pdf в excel vba
Я только 21 июня выйду на работу и у меня появится доступ ко всем файлам.
Цикл работы макроса: от письма Outlook, до преобразования в Excel
Я только 21 июня выйду на работу и у меня появится доступ ко всем файлам.
Цикл работы макроса: от письма Outlook, до преобразования в Excel XMbIPb
Андрей, так а чего там сложного? Выгрузка вложения из Outlook дело понятное. Затем конвертер из Pdf в Txt с поддержкой командной строки что-нибудь вроде этого, а потом чтение полученных текстовых файлов и выгрузка их данных на лист.
Андрей, так а чего там сложного? Выгрузка вложения из Outlook дело понятное. Затем конвертер из Pdf в Txt с поддержкой командной строки что-нибудь вроде этого, а потом чтение полученных текстовых файлов и выгрузка их данных на лист. anvg
Андрей, так а чего там сложного? Выгрузка вложения из Outlook дело понятное. Затем конвертер из Pdf в Txt с поддержкой командной строки что-нибудь вроде этого, а потом чтение полученных текстовых файлов и выгрузка их данных на лист. Автор - anvg
Дата добавления - 13.06.2016 в 12:55
Как и обещал, выкладываю:
Мой макрос начинается с Outlook. Написаны 2 правила, которые, если видят в теме письма ключевое слово, то срабатывают скрипты:
Первый сохраняет данные письма в строку Excel.
[vba]
Sub сохранение_писем(oMailItem As Outlook.MailItem)
Dim X, i, k As Integer
Dim oOutlook As Outlook.Application
Set oOutlook = New Outlook.Application
Dim oNs As Outlook.NameSpace
Set oNs = oOutlook.GetNamespace("MAPI")
Dim oInbox As Outlook.MAPIFolder
Set oInbox = oNs.GetDefaultFolder(olFolderInbox)
Dim nameaf, namevl, adres, telo, teloo, tema As String
Dim dateofmailitem As String
Dim objXls As Object
Dim wb As Object
Set objXls = CreateObject("Excel.Application")
Set wb = objXls.workbooks.Open("Y:\2_Рабочие файлы\2.1_ОКР\2.1.1_Реестр скидок\Вложения\Файлы для макроса\Хранилище писем.xlsb")
objXls.Application.Visible = True
X = 1
Do While objXls.Cells(X, 1).Value <> 0
X = X + 1
Loop
'Вызов приложения OutLook
Set objOL = CreateObject("Outlook.Application")
'Проверяем каждое выбранное письмо на наличие вложений.
'Если есть - сохраняем вложения по пути strFolderPath
For Each oMailItem In objSelection
'Превращаем переменную в коллекцию вложений
Set objAttachments = oMailItem.Attachments
'Подсчитываем вложения
lngCount = objAttachments.Count
'Если вложения есть, то.
If lngCount > 0 Then
' lngCount = 1 'ручная установка количества вложений
'Перебираем вложения
For k = 1 To lngCount
'Получаем имя конкретного вложения
namevl = objAttachments.Item(k).FileName
objXls.Sheets(1).Cells(X, k + 6).Value = namevl
Next k
End If
Next
nameaf = oMailItem.SenderName 'имя отправителя
adres = oMailItem.SenderEmailAddress 'адрес отправителя - работает не корректно. Дает глюки
teloo = oMailItem.Body 'тело письма
telo = oMailItem.HTMLBody 'тело письма
tema = oMailItem.Subject 'тема письма
dateofmailitem = Format(oMailItem.ReceivedTime, "dd.mm.yyyy hh.ss") 'время письма
objXls.Sheets(1).Cells(X, 1).Value = dateofmailitem
objXls.Sheets(1).Cells(X, 2).Value = nameaf
objXls.Sheets(1).Cells(X, 3).Value = adres
objXls.Sheets(1).Cells(X, 4).Value = tema
objXls.Sheets(1).Cells(X, 5).Value = telo
objXls.Sheets(1).Cells(X, 6).Value = teloo
X = X + 1
Set objXls = Nothing
wb.Save
wb.Close
End Sub
Потом запускается второй, который сохраняет вложения в папку:
Sub[vba]
save_a(myItem As Outlook.MailItem)
Dim att_count As Integer
For att_count = 1 To myItem.Attachments.Count
myItem.Attachments.Item(att_count).SaveAsFile ("Y:\2_Рабочие файлы\2.1_ОКР\2.1.1_Реестр скидок\Вложения\" & myItem.Attachments.Item(att_count).FileName)
Next
End Sub
Дальше запускается внутренний макрос, который обрабатывает эти письма по Excel списку. Принципы его работы интереса для вас не представляют.
Он запускает обработку PDF файлов, в ходе чего он конвертирует их в txt
В папке "C:\pdf2txt" сохраняем все файлы из удалено
[moder]А чего это мы ссылками кидаемся? Если хотите поделиться готовым решением, для этого есть специальная ветка форума.
Здесь запрещено выкладывать файлы на сторонние ресурсы.[/moder]
Переносим Pdf файл в эту папку с называнием "YourPage.pdf" и запускается макрос:
Public Sub OpenPDF2()
Set WshShell = CreateObject("WScript.Shell")
ChDir ("C:\pdf2txt")
TestValue = Shell("C:\pdf2txt\YourPage.bat", 1)
End Sub
[/vba]
Макрос преобразует PDF в TXT, А потом устанавливается связь с текстом и начинается уже работа с таблицей.
Как и обещал, выкладываю:
Мой макрос начинается с Outlook. Написаны 2 правила, которые, если видят в теме письма ключевое слово, то срабатывают скрипты:
Первый сохраняет данные письма в строку Excel.
[vba]
Sub сохранение_писем(oMailItem As Outlook.MailItem)
Dim X, i, k As Integer
Dim oOutlook As Outlook.Application
Set oOutlook = New Outlook.Application
Dim oNs As Outlook.NameSpace
Set oNs = oOutlook.GetNamespace("MAPI")
Dim oInbox As Outlook.MAPIFolder
Set oInbox = oNs.GetDefaultFolder(olFolderInbox)
Dim nameaf, namevl, adres, telo, teloo, tema As String
Dim dateofmailitem As String
Dim objXls As Object
Dim wb As Object
Set objXls = CreateObject("Excel.Application")
Set wb = objXls.workbooks.Open("Y:\2_Рабочие файлы\2.1_ОКР\2.1.1_Реестр скидок\Вложения\Файлы для макроса\Хранилище писем.xlsb")
objXls.Application.Visible = True
X = 1
Do While objXls.Cells(X, 1).Value <> 0
X = X + 1
Loop
'Вызов приложения OutLook
Set objOL = CreateObject("Outlook.Application")
'Проверяем каждое выбранное письмо на наличие вложений.
'Если есть - сохраняем вложения по пути strFolderPath
For Each oMailItem In objSelection
'Превращаем переменную в коллекцию вложений
Set objAttachments = oMailItem.Attachments
'Подсчитываем вложения
lngCount = objAttachments.Count
'Если вложения есть, то.
If lngCount > 0 Then
' lngCount = 1 'ручная установка количества вложений
'Перебираем вложения
For k = 1 To lngCount
'Получаем имя конкретного вложения
namevl = objAttachments.Item(k).FileName
objXls.Sheets(1).Cells(X, k + 6).Value = namevl
Next k
End If
Next
nameaf = oMailItem.SenderName 'имя отправителя
adres = oMailItem.SenderEmailAddress 'адрес отправителя - работает не корректно. Дает глюки
teloo = oMailItem.Body 'тело письма
telo = oMailItem.HTMLBody 'тело письма
tema = oMailItem.Subject 'тема письма
dateofmailitem = Format(oMailItem.ReceivedTime, "dd.mm.yyyy hh.ss") 'время письма
objXls.Sheets(1).Cells(X, 1).Value = dateofmailitem
objXls.Sheets(1).Cells(X, 2).Value = nameaf
objXls.Sheets(1).Cells(X, 3).Value = adres
objXls.Sheets(1).Cells(X, 4).Value = tema
objXls.Sheets(1).Cells(X, 5).Value = telo
objXls.Sheets(1).Cells(X, 6).Value = teloo
X = X + 1
Set objXls = Nothing
wb.Save
wb.Close
End Sub
Потом запускается второй, который сохраняет вложения в папку:
Sub[vba]
save_a(myItem As Outlook.MailItem)
Dim att_count As Integer
For att_count = 1 To myItem.Attachments.Count
myItem.Attachments.Item(att_count).SaveAsFile ("Y:\2_Рабочие файлы\2.1_ОКР\2.1.1_Реестр скидок\Вложения\" & myItem.Attachments.Item(att_count).FileName)
Next
End Sub
Дальше запускается внутренний макрос, который обрабатывает эти письма по Excel списку. Принципы его работы интереса для вас не представляют.
Он запускает обработку PDF файлов, в ходе чего он конвертирует их в txt
В папке "C:\pdf2txt" сохраняем все файлы из удалено
[moder]А чего это мы ссылками кидаемся? Если хотите поделиться готовым решением, для этого есть специальная ветка форума.
Здесь запрещено выкладывать файлы на сторонние ресурсы.[/moder]
Переносим Pdf файл в эту папку с называнием "YourPage.pdf" и запускается макрос:
Public Sub OpenPDF2()
Set WshShell = CreateObject("WScript.Shell")
ChDir ("C:\pdf2txt")
TestValue = Shell("C:\pdf2txt\YourPage.bat", 1)
End Sub
[/vba]
Макрос преобразует PDF в TXT, А потом устанавливается связь с текстом и начинается уже работа с таблицей. XMbIPb
Все, что Бог ни делает, все к лучшему.
Sub сохранение_писем(oMailItem As Outlook.MailItem)
Dim X, i, k As Integer
Dim oOutlook As Outlook.Application
Set oOutlook = New Outlook.Application
Dim oNs As Outlook.NameSpace
Set oNs = oOutlook.GetNamespace("MAPI")
Dim oInbox As Outlook.MAPIFolder
Set oInbox = oNs.GetDefaultFolder(olFolderInbox)
Dim nameaf, namevl, adres, telo, teloo, tema As String
Dim dateofmailitem As String
Dim objXls As Object
Dim wb As Object
Set objXls = CreateObject("Excel.Application")
Set wb = objXls.workbooks.Open("Y:\2_Рабочие файлы\2.1_ОКР\2.1.1_Реестр скидок\Вложения\Файлы для макроса\Хранилище писем.xlsb")
objXls.Application.Visible = True
X = 1
Do While objXls.Cells(X, 1).Value <> 0
X = X + 1
Loop
'Вызов приложения OutLook
Set objOL = CreateObject("Outlook.Application")
'Проверяем каждое выбранное письмо на наличие вложений.
'Если есть - сохраняем вложения по пути strFolderPath
For Each oMailItem In objSelection
'Превращаем переменную в коллекцию вложений
Set objAttachments = oMailItem.Attachments
'Подсчитываем вложения
lngCount = objAttachments.Count
'Если вложения есть, то.
If lngCount > 0 Then
' lngCount = 1 'ручная установка количества вложений
'Перебираем вложения
For k = 1 To lngCount
'Получаем имя конкретного вложения
namevl = objAttachments.Item(k).FileName
objXls.Sheets(1).Cells(X, k + 6).Value = namevl
Next k
End If
Next
nameaf = oMailItem.SenderName 'имя отправителя
adres = oMailItem.SenderEmailAddress 'адрес отправителя - работает не корректно. Дает глюки
teloo = oMailItem.Body 'тело письма
telo = oMailItem.HTMLBody 'тело письма
tema = oMailItem.Subject 'тема письма
dateofmailitem = Format(oMailItem.ReceivedTime, "dd.mm.yyyy hh.ss") 'время письма
objXls.Sheets(1).Cells(X, 1).Value = dateofmailitem
objXls.Sheets(1).Cells(X, 2).Value = nameaf
objXls.Sheets(1).Cells(X, 3).Value = adres
objXls.Sheets(1).Cells(X, 4).Value = tema
objXls.Sheets(1).Cells(X, 5).Value = telo
objXls.Sheets(1).Cells(X, 6).Value = teloo
X = X + 1
Set objXls = Nothing
wb.Save
wb.Close
End Sub
Потом запускается второй, который сохраняет вложения в папку:
Sub[vba]
save_a(myItem As Outlook.MailItem)
Dim att_count As Integer
For att_count = 1 To myItem.Attachments.Count
myItem.Attachments.Item(att_count).SaveAsFile ("Y:\2_Рабочие файлы\2.1_ОКР\2.1.1_Реестр скидок\Вложения\" & myItem.Attachments.Item(att_count).FileName)
Next
End Sub
Дальше запускается внутренний макрос, который обрабатывает эти письма по Excel списку. Принципы его работы интереса для вас не представляют.
Он запускает обработку PDF файлов, в ходе чего он конвертирует их в txt
В папке "C:\pdf2txt" сохраняем все файлы из удалено
[moder]А чего это мы ссылками кидаемся? Если хотите поделиться готовым решением, для этого есть специальная ветка форума.
Здесь запрещено выкладывать файлы на сторонние ресурсы.[/moder]
Переносим Pdf файл в эту папку с называнием "YourPage.pdf" и запускается макрос:
Public Sub OpenPDF2()
Set WshShell = CreateObject("WScript.Shell")
ChDir ("C:\pdf2txt")
TestValue = Shell("C:\pdf2txt\YourPage.bat", 1)
End Sub
[/vba]
Макрос преобразует PDF в TXT, А потом устанавливается связь с текстом и начинается уже работа с таблицей. Автор - XMbIPb
Дата добавления - 21.06.2016 в 17:34
Задача переноса данных из таблицы в PDF-файле на лист Microsoft Excel - это всегда "весело". Особенно если у вас нет дорогих программ распознавания типа FineReader или чего-то подобного. Прямое копирование обычно ни к чему хорошему не приводит, т.к. после вставки скопированных данных на лист, они, скорее всего, "слипнутся" в один столбец. Так что их потом придется кропотливо разделять с помощью инструмента Текст по столбцам с вкладки Данные (Data - Text to Columns) .
И само-собой, копирование возможно только для тех PDF-файлов, где есть текстовый слой, т.е. с только что отсканированным с бумаги в PDF документом это не сработает в принципе.
Но все не так грустно, на самом деле :)
Если у вас Office 2013 или 2016, то за пару минут без дополнительных программ вполне можно реализовать перенос данных из PDF в Microsoft Excel. А помогут нам в этом Word и Power Query.
Для примера, давайте возьмем вот такой PDF-отчет с кучей текста, формул и таблиц с сайта Европейской Экономической Комиссии:
. и попробуем вытащить из него в Excel, скажем первую таблицу:
Шаг 1. Открываем PDF в Word
Почему-то мало кто знает, но начиная с 2013 года Microsoft Word научился открывать и распознавать PDF файлы (даже отсканированные, т.е. без текстового слоя!). Делается это совершенно стандартным образом: открываем Word, жмем Файл - Открыть (File - Open) и уточняем PDF-формат в выпадающем списке в правом нижнем углу окна.
Затем выбираем нужный нам PDF-файл и жмем Открыть (Open) . Word сообщает нам, что собирается запустить распознавание этого документа в текст:
Соглашаемся и через несколько секунд увидим наш PDF открытым для редактирования уже в Word:
Само-собой, у документа частично слетит дизайн, стили, шрифты, колонтитулы и т.п., но для нас это не важно - нам нужны только данные из таблиц. В принципе, на этом этапе уже возникает соблазн дальше просто скопировать таблицу из распознанного документа в Word и просто вставить ее в Excel. Иногда это срабатывает, но чаще приводит ко всевозможным искажениям данных - например числа могут превратиться в даты или остаться текстом, как в нашем случае, т.к. в PDF используется не российские разделители:
Так что давайте не будем срезать углы, а сделаем все чуть сложнее, но правильно.
Этап 2. Сохраняем документ как веб-страницу
Чтобы потом загрузить полученные данные в Excel (через Power Query), наш документ в Word нужно сохранить в формате веб-страницы - этот формат является, в данном случае, неким общим знаменателем между Word'ом и Excel'ем.
Для этого идем в меню Файл - Сохранить как (File - Save As) или жмем клавишу F12 на клавиатуре и в открывшемся окне выбираем тип файла Веб-страница в одном файле (Webpage - Single file) :
После сохранения должен получиться файл с расширением mhtml (если у вас в Проводнике видны расширения файлов).
Этап 3. Загружаем файл в Excel через Power Query
Можно открыть созданный MHTML-файл в Excel напрямую, но тогда мы получим, во-первых сразу все содержимое PDF вместе текстом и кучей ненужных таблиц, а, во-вторых, опять потеряем данные из-за неправильных разделителей. Поэтому импорт в Excel мы будем делать через надстройку Power Query. Это совершенно бесплатная надстройка, с помощью которой можно загружать в Excel данные практически из любых источников (файлов, папок, баз данных, ERP-систем) и всячески затем полученные данные трансформировать, придавая им нужную форму.
Если у вас Excel 2010-2013, то скачать Power Query можно с официального сайта Microsoft - после установки у вас появится вкладка Power Query. Если у вас Excel 2016 или новее, то качать ничего не нужно - весь функционал уже встроен в Excel по-умолчанию и находится на вкладке Данные (Data) в группе Загрузить и преобразовать (Get & Transform) .
Так что идем либо на вкладку Данные, либо на вкладку Power Query и выбираем команду Получить данные или Создать запрос - Из файла - Из XML. Чтобы были видны не только XML-файлы - меняем в выпадающем списке в правом нижнем углу окна фильтры на Все файлы (All files) и указываем наш MHTML-файл:
Обратите внимание, что импорт успешно не завершится, т.к. Power Query ждет от нас XML, а у нас, на самом деле, HTML-формат. Поэтому в следующем появившемся окне нужно будет щелкнуть правой кнопкой мыши по непонятному для Power Query файлу и уточнить его формат:
После этого файл будет корректно распознан и мы увидим список всех таблиц, которые в нем есть:
Посмотреть содержимое таблиц можно, если щелкать левой кнопкой мыши в белый фон (не в слово Table!) ячеек в столбце Data.
Когда нужная таблица определена, щелкните по зеленому слову Table - и вы "провалитесь" в её содержимое:
Останется проделать несколько простых действий, чтобы "причесать" ее содержимое, а именно:
- удалить ненужные столбцы (правой кнопкой мыши по заголовку столбца - Удалить)
- заменить точки на запятые (выделить столбцы, щелкнуть правой - Замена значений)
- удалить знаки равно в шапке (выделить столбцы, щелкнуть правой - Замена значений)
- удалить верхнюю строку (Главная- Удалить строки - Удаление верхних строк)
- удалить пустые строки (Главная - Удалить строки - Удаление пустых строк)
- поднять первую строку в шапку таблицы (Главная - Использовать первую строку в качестве заголовков)
- отфильтровать лишние данные с помощью фильтра
Когда таблица будет приведена в нормальный вид, ее можно выгрузить на лист командой Закрыть и загрузить (Close & Load) на Главной вкладке. И мы получим вот такую красоту, с которой уже можно работать:
Задача переноса данных из таблицы в PDF-файле на лист Microsoft Excel - это всегда "весело". Особенно если у вас нет дорогих программ распознавания типа FineReader или чего-то подобного. Прямое копирование обычно ни к чему хорошему не приводит, т.к. после вставки скопированных данных на лист, они, скорее всего, "слипнутся" в один столбец. Так что их потом придется кропотливо разделять с помощью инструмента Текст по столбцам с вкладки Данные (Data - Text to Columns) .
И само-собой, копирование возможно только для тех PDF-файлов, где есть текстовый слой, т.е. с только что отсканированным с бумаги в PDF документом это не сработает в принципе.
Но все не так грустно, на самом деле :)
Если у вас Office 2013 или 2016, то за пару минут без дополнительных программ вполне можно реализовать перенос данных из PDF в Microsoft Excel. А помогут нам в этом Word и Power Query.
Для примера, давайте возьмем вот такой PDF-отчет с кучей текста, формул и таблиц с сайта Европейской Экономической Комиссии:
. и попробуем вытащить из него в Excel, скажем первую таблицу:
Шаг 1. Открываем PDF в Word
Почему-то мало кто знает, но начиная с 2013 года Microsoft Word научился открывать и распознавать PDF файлы (даже отсканированные, т.е. без текстового слоя!). Делается это совершенно стандартным образом: открываем Word, жмем Файл - Открыть (File - Open) и уточняем PDF-формат в выпадающем списке в правом нижнем углу окна.
Затем выбираем нужный нам PDF-файл и жмем Открыть (Open) . Word сообщает нам, что собирается запустить распознавание этого документа в текст:
Соглашаемся и через несколько секунд увидим наш PDF открытым для редактирования уже в Word:
Само-собой, у документа частично слетит дизайн, стили, шрифты, колонтитулы и т.п., но для нас это не важно - нам нужны только данные из таблиц. В принципе, на этом этапе уже возникает соблазн дальше просто скопировать таблицу из распознанного документа в Word и просто вставить ее в Excel. Иногда это срабатывает, но чаще приводит ко всевозможным искажениям данных - например числа могут превратиться в даты или остаться текстом, как в нашем случае, т.к. в PDF используется не российские разделители:
Так что давайте не будем срезать углы, а сделаем все чуть сложнее, но правильно.
Этап 2. Сохраняем документ как веб-страницу
Чтобы потом загрузить полученные данные в Excel (через Power Query), наш документ в Word нужно сохранить в формате веб-страницы - этот формат является, в данном случае, неким общим знаменателем между Word'ом и Excel'ем.
Для этого идем в меню Файл - Сохранить как (File - Save As) или жмем клавишу F12 на клавиатуре и в открывшемся окне выбираем тип файла Веб-страница в одном файле (Webpage - Single file) :
После сохранения должен получиться файл с расширением mhtml (если у вас в Проводнике видны расширения файлов).
Этап 3. Загружаем файл в Excel через Power Query
Можно открыть созданный MHTML-файл в Excel напрямую, но тогда мы получим, во-первых сразу все содержимое PDF вместе текстом и кучей ненужных таблиц, а, во-вторых, опять потеряем данные из-за неправильных разделителей. Поэтому импорт в Excel мы будем делать через надстройку Power Query. Это совершенно бесплатная надстройка, с помощью которой можно загружать в Excel данные практически из любых источников (файлов, папок, баз данных, ERP-систем) и всячески затем полученные данные трансформировать, придавая им нужную форму.
Если у вас Excel 2010-2013, то скачать Power Query можно с официального сайта Microsoft - после установки у вас появится вкладка Power Query. Если у вас Excel 2016 или новее, то качать ничего не нужно - весь функционал уже встроен в Excel по-умолчанию и находится на вкладке Данные (Data) в группе Загрузить и преобразовать (Get & Transform) .
Так что идем либо на вкладку Данные, либо на вкладку Power Query и выбираем команду Получить данные или Создать запрос - Из файла - Из XML. Чтобы были видны не только XML-файлы - меняем в выпадающем списке в правом нижнем углу окна фильтры на Все файлы (All files) и указываем наш MHTML-файл:
Обратите внимание, что импорт успешно не завершится, т.к. Power Query ждет от нас XML, а у нас, на самом деле, HTML-формат. Поэтому в следующем появившемся окне нужно будет щелкнуть правой кнопкой мыши по непонятному для Power Query файлу и уточнить его формат:
После этого файл будет корректно распознан и мы увидим список всех таблиц, которые в нем есть:
Посмотреть содержимое таблиц можно, если щелкать левой кнопкой мыши в белый фон (не в слово Table!) ячеек в столбце Data.
Когда нужная таблица определена, щелкните по зеленому слову Table - и вы "провалитесь" в её содержимое:
Останется проделать несколько простых действий, чтобы "причесать" ее содержимое, а именно:
- удалить ненужные столбцы (правой кнопкой мыши по заголовку столбца - Удалить)
- заменить точки на запятые (выделить столбцы, щелкнуть правой - Замена значений)
- удалить знаки равно в шапке (выделить столбцы, щелкнуть правой - Замена значений)
- удалить верхнюю строку (Главная- Удалить строки - Удаление верхних строк)
- удалить пустые строки (Главная - Удалить строки - Удаление пустых строк)
- поднять первую строку в шапку таблицы (Главная - Использовать первую строку в качестве заголовков)
- отфильтровать лишние данные с помощью фильтра
Когда таблица будет приведена в нормальный вид, ее можно выгрузить на лист командой Закрыть и загрузить (Close & Load) на Главной вкладке. И мы получим вот такую красоту, с которой уже можно работать:
I am trying to extract tables from pdf files with vba and export them to excel. If everything works out the way it should, it should go all automatic. The problem is that the table are not standardized.
This is what I have so far.
- VBA (Excel) runs XPDF, and converts all .pdf files found in current folder to a text file.
- VBA (Excel) reads through each text file line by line.
This all works great. But now I am getting to the issue of extracting the tables from the text files. What I am trying to do is VBA to find a string e.g. "Year's Income", and then output the data, after it, into columns. (Until the table ends.)
The first part is not very difficult (find a certain string), but how would I go about the second part. The text file will look like this Pastebin. The problem is that the text is not standardized. Thus for example some tables have 3-year columns (2010 2011 2012) and some only two (or 1), some tables have more spaces between the columnn, and some do not include certain rows (such as Capital Asset, net).
I was thinking about doing something like this but not sure how to go about it in VBA.
- Find user defined string. eg. "Table 1: Years' Return."
- a. Next line find years; if there are two we will need three columns in output (titles +, 2x year), if there are three we will need four (titles +, 3x year).. etc
b. Create title column + column for each year. - When reaching end of line, go to next line
- a. Read text -> output to column 1.
b. Recognize spaces (Are spaces > 3?) as start of column 2. Read numbers -> output to column 2.
c. (if column = 3) Recognize spaces as start of column 3. Read numbers -> output to column 3.
d. (if column = 4) Recognize spaces as start of column 4. Read numbers -> output to column 4. - Each line, loop 4.
- Next line does not include any numbers - End table. (probably the easiet just a user defined number, after 15 characters no number? end table)
I based my first version on Pdf to excel, but reading online people do not recommend OpenFile but rather FileSystemObject (even though it seems to be a lot slower).
Я использовал найденный мной код здесь и попытался извлечь PDF-файл. Код отлично извлекает PDF-файл в Excel, но я продолжаю получать уведомления. Я отключил отображение предупреждений, но это не имеет значения.
Привет, разработчики, я предполагаю, что вы уже знаете, как экспортировать pdf через jsPDF. Если ответ отрицательный, то вы можете ознакомиться с моей.
Ответы 2
Измените свой код на:
Это по-прежнему не подавляет предупреждения Слово
@Selrac - найдите дополнительные параметры Documents.Open , особенно - ConfirmConversions - «Верно, чтобы отобразить диалоговое окно« Преобразовать файл », если файл не в формате Microsoft Word», так что это должен быть False . Application.DisplayAlerts относится к приложению Excel, а не к экземпляру Word.
Application.DisplayAlerts относится к приложению Excel, нет - к экземпляру Слово, которое отображает предупреждения.
Чтобы избежать первых двух предупреждений, используйте дополнительные параметры Documents.Open
- ConfirmConversions - «Верно, чтобы отобразить диалоговое окно« Преобразовать файл », если файл не в формате Microsoft Word» - итак False .
- Только для чтения - «Верно, чтобы открыть документ только для чтения» - итак True .
Закрытие документа без сохранения изменений кажется, чтобы также избежать третьего всплывающего окна. Этот также может быть вариантом.
Другие вопросы по теме
Как подписать PDF-файл подписью из центра сертификации в Microsoft AD с помощью клиентского скрипта или программы
Похожие вопросы
Находите ответы на сложные технические вопросы по программированию, с которыми сталкиваются инженеры по всему миру в своей ежедневной практике на сайте RedDeveloper.
Читайте также: