- PVSM.RU - https://www.pvsm.ru -
Некоторые гос. структуры формируют отчёты в doc файлах. Где-то это делается руками, а где-то автоматически. Представим, что вам поручено обработать тонну таких документов. Это может быть необходимо для вычленения какой-то конкретной информации или просто проверки содержимого. Нам нужно вынуть только неформатированный текст без графиков и картинок. К примеру такие данные проще засовывать в нейронную сеть для дальнейшего анализа.
Вот некоторые варианты для самого обычного человека:
Как раз о последнем варианте и пойдёт речь.
И на помощь к нам спешит vbs скрипт. vbs скрипт можно вызвать из командной строки, что можно сделать в любом языке программирования.
Создадим файл converter.vbs
Const wdFormatText = 2
Set objWord = CreateObject("Word.Application")
Set objDoc = objWord.Documents.Open(Wscript.Arguments.Item(0), True)
objDoc.SaveAs WScript.Arguments.Item(1), wdFormatText
objWord.Quit
В первой строке мы указываем в какой формат будем конвертировать: 2 — в txt, 17 — в pdf.
Во второй строке мы открываем непосредственно word. После открытия можно добавить следующую строку:
objWord.Visible = TRUE
Это приведёт к тому, что мы будем видеть процесс открытия Word. Это может быть полезно в том случае, если в какой-то момент произойдёт ошибка, word не закроется сам, и без этой строчки процесс можно будет убить только через диспетчер задач, а так мы просто сможем нажать на крестик.
В командной строке скрипт будет запускаться следующим образом:
converter.vbs полный_путь_к_файлуимя_файла.docx полный_путь_куда_сохранитьимя_файла_без_расширения
Wscript.Arguments.Item(0) — это полный_путь_к_файлуимя_файла.docx
WScript.Arguments.Item(1) — полный_путь_куда_сохранитьимя_файла_без_расширения
Соответственно в третьей строке нашего скрипта мы открываем файл, и на следующей строке сохраняем в указанный формат. И в завершении закрываем word.
Есть ещё одна маленькая нужная хитрость. Иногда из-за разницы в версиях word или по другим причинам, word может ругнуться, сказав, что файл повреждён. При ручном открытии файла мы увидим предупреждение «повреждена таблица, продолжить открытие файла?». И нужно лишь нажать на «Да», но скрипт уже на этом моменте прекратит свою работу.
В vbs очень корявая конструкция «try catch». Обойти данную проблему можно добавив всего две строчки. Итого полноценный стабильный скрипт выглядит следующим образом:
Const wdFormatText = 2
Set objWord = CreateObject("Word.Application")
objWord.Visible = TRUE
On Error Resume Next
Set objDoc = objWord.Documents.Open(Wscript.Arguments.Item(0), True)
Set objDoc = objWord.Documents.Open(Wscript.Arguments.Item(0), True)
objDoc.SaveAs WScript.Arguments.Item(1), wdFormatText
objWord.Quit
Как вы можете заметить, продублировано открытие файла. В случае когда с файлом всё в порядке, файл просто откроется два раза, а в случае ошибки просто продолжит открытие файла.
И на всякий пожарный, пример того как может выглядеть функция на Python
import os
#folder_from = os.getcwd() + r'words' - папка, где лежит тонна word файлов
#folder_to = os.getcwd() + r'txts' - папка, куда будем сохранять
def convert(file_name):
str1 = folder_from + r"/" + file_name
str2 = folder_to + r"/" + file_name[:file_name.rfind('.')]
os.system('converter.vbs "' + str1 + '" "' + str2 + '"') #запуск скрипта
Далее, просто применяем эту функцию ко всем файлам, которые нужно конвертнуть.
Автор: RadioRedFox
Источник [1]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/python/309909
Ссылки в тексте:
[1] Источник: https://habr.com/ru/post/441736/?utm_campaign=441736
Нажмите здесь для печати.