Страницы: 1
RSS
Автоматизированный перенос определённого фрагмента документа Word в таблицу Excel
 

Подскажите пожалуйста, как можно выудить из массива документов в формате Word фамилию, имя человека и автоматизированно перенести её  в таблицу Excel.

Имеется 1000 записанных в Word документов  (также имеются эти 1000 документов в формате Pdf, но формат Pdf не был задан при сохранении документов, он был задан на сканере когда бумажные версии этих документов сканировались) .

Расположение фамилии, имени в документах Word стандартизировано: они расположены в документах в одинаковом месте. Документы Word частично в табличной форме, частично простым текстом.

Сейчас приходится для выборки фамилии и последующей вставки в таблицу Excel  открывать каждый из 1000 этих документов в Word, копировать фамилию, имя и вставлять эти данные в таблицу Excel.

Изменено: Olga H. - 25.11.2018 11:12:15
 
Цитата
Olga H. написал: как можно выудить из массива документов в формате Word фамилию, имя человека и автоматизированно перенести её  в таблицу Excel.
Ответ от капитана Очевидность - макросом.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Цитата
Olga H. написал:
(также имеются эти 1000 документов в формате Pdf, но формат Pdf не был задан при сохранении документов, он был задан на сканере когда бумажные версии этих документов сканировались)
PDF сразу досвидания, если конечно нет желания посоревноваться с ABBYY по OCR.

Цитата
Olga H. написал:
меется 1000 записанных в Word документов
хоть на один дадите посмотреть?
По вопросам из тем форума, личку не читаю.
 
БМВ,
Помогите пожалуйста сделать так, чтобы фамилии и имена (Petrov Ivan, Ivanov Pjotr) из приложенных документов Word автоматизированно скопировались бы, соответственно, в ячейки E2, E3 Листа 10 документа Excel "Copy of пример462"
 
Olga H., то есть ФИО брать из имён вордовских файлов?

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Если на вопрос JayBhagavan, ответ нет, то читаем параграфы For Each p In ActiveDocument.Paragraphs : Text= p.Range.Text
Остальное дело техники
По вопросам из тем форума, личку не читаю.
 
JayBhagavan,
фамилии и имена из содержания вордовского документа.  
 
Такая UDF с подачи БМВ:
Скрытый текст
Пример вызова как формулы в ячейке:
=jjj_FnLn("Ivanov Petr.docx")
=jjj_FnLn("Petrov Ivan.docx")

Предупреждаю, что будет тормозить в больших количествах.
Изменено: JayBhagavan - 25.11.2018 14:45:39 (Исправил добавление разделителя пути)

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Цитата
Olga H. написал: скопировались бы, соответственно, в ячейки E2, E3
И где, чем это соответствие/последовательность определяется для 1000 файлов?
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Исправил добавление разделителя пути.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan,
подскажите пожалуйста, каков порядок применения этого макроса. Внесла в исходный текст Листа 10 примера "Copy of пример462" ваш макрос, ввела в строку E2  формулу =jjj_FnLn("Ivanov Petr.docx") и выскакивает надпись #ИМЯ?
 
Цитата
Olga H. написал: Внесла в исходный текст Листа 10
Код функции надо вносить в отдельный модуль.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan,
спасибо, ваш модуль сработал: внесла его в модуль листа, затем внесла в ячейку E2 формулу  =jjj_FnLn("Ivanov Petr.docx" и в ячейке E2 появилась надпись "Ivanov Petr".

Сама сейчас понимаю, что потратила ваше время и нечётко сформулировала задачу. Согласно описанного выше способа, всё равно приходится каждый раз менять формулу и вносить в неё вручную фамилию и имя, которое хочу увидеть в ячейках Таблицы на листе 10.

Необходимо другое: у меня в в компьютере 1000 разных документов в формате Word, внутри которых в одинаковом месте содержится фамилия и имя. Хочу вытащить из документов Word в Таблицу 10 Excel, в столбец Е, в любой последовательности фамилии и имена (они разные в каждом документе Word), На примере, который был в сообщении 1, хочу попросить показать как это возможно сделать без того, чтобы во вносимую в каждую ячейку формулу вручную вписывать имя и фамилию, которую хочу в ячейке увидеть.  
 
Перед запуском макроса укажите свой путь к папке с вордовскими файлами. Вместо:
Код
sPath = ThisWorkbook.Path & Application.PathSeparator & "docs\"
укажите, допустим:
Код
sPath = "D:\docs\"

Скрытый текст

+++
Забыл сказать. Результат поиска выводится в новую книгу без её сохранения. Чтобы не гадать куда Вам на самом деле нужно поместить результат, скопипастите ячейки с ФИ вручную.
Изменено: JayBhagavan - 25.11.2018 17:04:15

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan,

Спасибо, с помощью вашего макроса я вытащила из вордовских документов фамилии и имена.

1)заменила в строке 2 вашего макроса путь к папке с вордовскими файлами на свой путь.

2)вставила изменённый (см. пункт 1) макрос в модуль.

3)Нажала во вкладке «Run» команду «Run sub» и выскочила Книга, в ячейках которых были вытащенные из вордовских файлов фамилии и имена.

Напишите пожалуйста, ваш макрос уникален для конкретной задачи или же чуть подкорректировала некоторые координаты в макросе и из однотипных вордовских файлов можно выудить и другую информацию, например, «Identification», «Document», «Date and place of birth»?

У меня просьба, откорректируйте пожалуйста макрос,  чтобы по той же схеме было возможно выудить в любую Книгу, в любой последовательности, из однотипных вордовских документов информацию об «Identification», «Document», «Date and place of birth».

 
Olga H., я Вам помог. Помогите и Вы мне - разберитесь как работает макрос и модифицируйте/унифицируйте его по своему усмотрению.
Я опишу основную часть, которую Вам надо менять/унифицировать под свои условия получения желаемого из вордовских файлов:
Код
                ' - цикл по абзацам открытого макросом вордовского документа
                For Each objP In .Paragraphs
                    ' - записали считанный абзац в строковую переменную
                    sText = objP.Range.Text
                    ' - проверка, если в считанном абзаце есть символ табуляции
                    If InStr(1, sText, vbTab) > 0 Then
                        ' - то формируем одномерный строковый массив по разделителю символ табуляция, _
                            нумерация элементов массива всегда начинается с 0 (нуля), _
                            например, был абзац: _
                            какой-то текст табуляция табуляция Фамилия Имя _
                            то при конвертации в массив получим массив из строк: _
                            "какой-то текст", "", "Фамилия Имя"
                        arr = Split(sText, vbTab)
                        ' - если нижняя граница массива больше либо равна 2 _
                            (в абзаце было два или более символов табуляции)
                        ' - записываем в элемент массива arrOut (номер строки, номер столбца, т.к. массив 2мерный) _
                            строку из элемента массива по индексу 2 и _
                            из словаря полный путь к файлу с которым мы сейчас работали
                        ' - выход из этого цикла - перестаём дальше анализировать абзацы в этом вордовском документе, т.к. мы нашли искомое
                        If UBound(arr) >= 2 Then arrOut(i + 1, 1) = arr(2): arrOut(i + 1, 2) = dict.Keys()(i): Exit For
                    End If
                Next

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
Страницы: 1
Наверх