Хабрахабр

[Из песочницы] Автоматизация конвертирования word файлов в другие форматы

Некоторые гос. структуры формируют отчёты в doc файлах. Где-то это делается руками, а где-то автоматически. Представим, что вам поручено обработать тонну таких документов. Это может быть необходимо для вычленения какой-то конкретной информации или просто проверки содержимого. Нам нужно вынуть только неформатированный текст без графиков и картинок. К примеру такие данные проще засовывать в нейронную сеть для дальнейшего анализа.

Вот некоторые варианты для самого обычного человека:

  • Ручками перебрать все файлы по одному. Уже после десятого документа к вам придёт мысль о том, что вы делаете что-то не так.
  • Попробовать найти в интернете специальную библиотеку (расширение) для работы с doc файлами на языке программирования, которым вы владеете. Потратить часок другой на понимание как работать с этой библиотекой. Также вам ещё предстоит столкнуться с тем, что принципы работы с doc и docx слегка отличаются.
  • Попытаться автоматизировано пересохранить все документы в другой формат, с которым будет удобнее работать.

Как раз о последнем варианте и пойдёт речь.

vbs скрипт можно вызвать из командной строки, что можно сделать в любом языке программирования.
Создадим файл converter.vbs И на помощь к нам спешит 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 минут.
  3. Можно реализовать зная любой язык программирования.
Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть