Автоматизация конвертирования word файлов в другие форматы

в 19:59, , рубрики: PDF, python, vbs, vbscript, word в pdf, word в txt, wordpress, автоматизация, автоматизация рутины, конвертирование, конвертирование в pdf, конвертирование в txt, работа с документами

Некоторые гос. структуры формируют отчёты в 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 + '"') #запуск скрипта

Далее, просто применяем эту функцию ко всем файлам, которые нужно конвертнуть.

Итог

  1. Данное решение подходит под все форматы word.
  2. На прочтение этой статьи вы потратили не более 10 минут.

Автор: RadioRedFox

Источник

* - обязательные к заполнению поля