Как прочитать файлы DOC и DOCX в 1С без использования COM?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При попытке загрузить файл формата .doc или .docx напрямую в объект ТабличныйДокумент с помощью метода Прочитать() разработчики 1С сталкиваются с ошибкой. В отличие от табличных файлов (XLS, XLSX, CSV, HTML), текстовые документы Word представляют собой файлы со сплошной (потоковой) версткой, и платформа 1С не предназначена для их прямого открытия в табличном документе.

Рассмотрим, почему возникает эта проблема, и разберем практические способы чтения и загрузки данных из файлов Word без привлечения COM-объектов (MS Office), что особенно актуально при работе на серверах под управлением Linux.

Причины ограничений платформы 1С

Выясним причину, по которой штатный метод Прочитать() объекта ТабличныйДокумент выдает ошибку при работе с документами Word:

  1. Файл .doc (Microsoft Word 97–2003) — это бинарный OLE-контейнер. Извлечь из него структурированные данные без специальных утилит или сторонних библиотек невозможно.
  2. Файл .docx — это ZIP-архив, содержащий внутри набор XML-файлов с разметкой текста, таблиц и стилей.

Способ 1. Использование встроенной функции ИзвлечьТекст()

Если задача заключается исключительно в получении простого текста из документа без сохранения сложного форматирования и сетки таблиц, разберем работу штатной функции платформы ИзвлечьТекст(). Данная функция работает нативно и не требует использования COM-соединения.

Посмотрим на пример использования:


ТекстДокумента = ИзвлечьТекст("C:\Docs\Contract.docx");
Сообщить(ТекстДокумента);

Данный подход отлично подходит для задач полнотекстового поиска, анализа содержимого или первичного парсинга текстовых данных.

Способ 2. Прямой разбор структуры DOCX через ZIP и XML

Так как формат .docx является ZIP-архивом, мы можем распаковать его стандартными средствами 1С с помощью объекта ЧтениеZipФайла и прочитать основной файл с текстовым содержимым word/document.xml.

Разберем процесс по шагам:

  1. Открываем архив .docx с помощью объекта ЧтениеZipФайла.
  2. Распаковываем файл word/document.xml во временный каталог.
  3. Читаем XML-файл с помощью объекта ЧтениеXML или ПостроительDOM.
  4. Парсим основные теги разметки Word:
    1. <w:tbl> — таблица документа;
    2. <w:tr> — строка таблицы;
    3. <w:tc> — ячейка таблицы;
    4. <w:t> — текстовое содержимое.
  5. Заполняем полученными данными ячейки объекта ТабличныйДокумент или ТаблицаЗначений.

Рассмотрим пример кода для извлечения основного XML-файла из архива DOCX:


КаталогВременныхФайлов = КаталогВременныхФайлов();
ИмяИсполняемогоФайла = "C:\Docs\TableData.docx";

ЧтениеZip = Новый ЧтениеZipФайла(ИмяИсполняемогоФайла);
Для Каждого ЭлементАрхива Из ЧтениеZip.Элементы Цикл
    Если ЭлементАрхива.ПолноеИмя = "word/document.xml" Тогда
        ЧтениеZip.Извлечь(ЭлементАрхива, КаталогВременныхФайлов, РежимВосстановленияПутейФайлов.НеВосстанавливать);
        Прервать;
    КонецЕсли;
КонецЦикла;
ЧтениеZip.Закрыть();

ПутьКXML = КаталогВременныхФайлов + "document.xml";

Способ 3. Конвертация через консольный режим LibreOffice

Если необходимо загрузить документ со сложной табличной структурой непосредственно в ТабличныйДокумент, проанализируем вариант с предварительной консольной конвертацией файла. Данный метод является кроссплатформенным и работает как на Windows, так и на Linux-серверах.

С помощью консольного режима LibreOffice (пакет soffice) документ конвертируется в формат HTML или XLSX, после чего платформа 1С легко считывает его штатным методом Прочитать().

Рассмотрим команду консольной конвертации:


soffice --headless --convert-to html "C:\Docs\Document.docx" --outdir "C:\Docs\Converted\"

После выполнения данной команды полученный HTML-файл можно беспрепятственно загрузить в 1С:


ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать("C:\Docs\Converted\Document.html", СпособЧтенияТабличногоДокумента.HTML);

Способ 4. Использование подсистем БСП

В «Библиотеке Стандартных Подсистем» (БСП) в подсистеме «Управление печатью» присутствуют готовые встроенные механизмы работы с макетами и файлами формата .docx. Если ваша конфигурация построена на базе БСП, рекомендуется проанализировать функции этой подсистемы — они позволяют формировать и обрабатывать документы Word без использования COM-объектов MS Office.

← На главную