Некоторые гос. структуры формируют отчёты в doc файлах. Где-то это делается руками, а где-то автоматически. Представим, что вам поручено обработать тонну таких документов. Это может быть необходимо для вычленения какой-то конкретной информации или просто проверки содержимого. Нам нужно вынуть только неформатированный текст без графиков и картинок. К примеру такие данные проще засовывать в нейронную сеть для дальнейшего анализа.
Вот некоторые варианты для самого обычного человека:
- Ручками перебрать все файлы по одному. Уже после десятого документа к вам придёт мысль о том, что вы делаете что-то не так.
- Попробовать найти в интернете специальную библиотеку (расширение) для работы с doc файлами на языке программирования, которым вы владеете. Потратить часок другой на понимание как работать с этой библиотекой. Также вам ещё предстоит столкнуться с тем, что принципы работы с doc и docx слегка отличаются.
- Попытаться автоматизировано пересохранить все документы в другой формат, с которым будет удобнее работать.
Как раз о последнем варианте и пойдёт речь.
И на помощь к нам спешит 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 + '"') #запуск скрипта
Далее, просто применяем эту функцию ко всем файлам, которые нужно конвертнуть.
Итог
- Данное решение подходит под все форматы word.
- На прочтение этой статьи вы потратили не более 10 минут.
Автор: RadioRedFox