Во времена господства платформы 1С:Предприятие 7.7 разработчики и системные администраторы активно использовали удобную библиотеку mxl2xl.dll. Этот конвертер прописывался в реестре операционной системы Windows и позволял Microsoft Excel напрямую импортировать файлы табличных документов 1С с расширением .mxl. С переходом на платформу 1С:Предприятие 8 пользователи столкнулись с проблемой: старый конвертер перестал открывать новые файлы.
В этой статье мы подробно разберем, почему старая библиотека больше не работает, проанализируем изменения в структуре файлов и рассмотрим современные эффективные способы конвертации табличных документов 1С в форматы Excel.
Давайте выясним причину, по которой старый конвертер оказался бесполезен для современных версий платформы. Все дело в кардинальном изменении внутренней структуры файлов .mxl:
mxl2xl.dll была разработана именно для парсинга этой бинарной структуры и трансляции ее в понятный для старых версий Excel формат.Поскольку mxl2xl.dll является закрытой 32-битной библиотекой, созданной задолго до появления формата XML в 1С, она физически не способна распаковать ZIP-контейнер и обработать XML-данные. Более того, современные версии Microsoft Office перешли на 64-битную архитектуру, в которой старые 32-битные библиотеки конвертеров в принципе не могут быть инициализированы.
Рассмотрим отличную официальную альтернативу, которую предоставляет фирма 1С. Это специальное бесплатное программное обеспечение «1С:Предприятие — Работа с файлами». Данное приложение представляет собой технологическую среду, которая позволяет просматривать, редактировать и сохранять файлы табличных документов .mxl без необходимости установки полноценной платформы 1С и приобретения клиентских лицензий.
Преимущества использования этой утилиты:
.mxl (как от версии 7.7, так и от любых версий 8.х).Разберем по шагам, как можно использовать утилиту для автоматической конвертации группы файлов с помощью командной строки. Допустим, нам необходимо преобразовать файл report.mxl в формат Excel. Мы можем составить скрипт автоматизации следующего вида:
"C:\Program Files\1CV8\Common\1cv8.exe" /ConvertFiles "C:\Docs\report.mxl" -To "C:\Docs\report.xlsx"
Использование параметров командной строки позволяет системным администраторам интегрировать конвертацию в любые сторонние бизнес-процессы и планировщики задач без привлечения программистов 1С.
Если у вас есть доступ к конфигуратору или вы разрабатываете собственную обработку, самым правильным и надежным решением будет сохранение табличного документа в формат Excel непосредственно в момент его формирования в 1С. Современная платформа 1С:Предприятие 8 (начиная с версии 8.3.6) обладает мощными встроенными механизмами экспорта, которые сохраняют разметку, цвета, шрифты, объединения ячеек и даже группировки строк.
Проанализируем пример кода, выполняющего сохранение табличного документа на диск в формате XLSX:
&НаСервере
Процедура СохранитьТабличныйДокументВExcel(ТабличныйДокумент, ПутьКФайлу)
// Проверим, что табличный документ содержит данные
Если ТабличныйДокумент.ВысотаТаблицы = 0 Тогда
ВызватьИсключение "Табличный документ пуст. Сохранение невозможно.";
КонецЕсли;
// Выполняем запись в формате XLSX (Excel 2007 и выше)
Попытка
ТабличныйДокумент.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLSX);
Сообщить("Файл успешно сохранен по пути: " + ПутьКФайлу);
Исключение
ЗаписьЖурналаРегистрации("КонвертацияВExcel",
УровеньЖурналаРегистрации.Ошибка,
,
,
ОписаниеОшибки());
ВызватьИсключение "Ошибка при сохранении файла: " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
КонецПроцедуры
В данном коде мы используем объект ТипФайлаТабличногоДокумента. При необходимости мы можем заменить ТипФайлаТабличногоДокумента.XLSX на устаревший формат ТипФайлаТабличногоДокумента.XLS97 (совместимый с Excel 97-2003), однако использование современного формата XLSX предпочтительнее, так как он снимает ограничения на максимальное количество строк (более 65 536) и обеспечивает меньший размер файла на диске.
Поскольку формат MXL в 1С:Предприятии 8 является открытым и представляет собой XML в ZIP-архиве, разработчики могут обойтись без использования объектов 1С для извлечения данных. Рассмотрим этот процесс концептуально:
.mxl на .zip.document.xml или аналогичным), содержащий узлы с описанием ячеек, их текстовых значений, формул и оформления.Этот способ незаменим, когда требуется организовать чтение отчетов 1С на серверах под управлением ОС Linux без использования графического интерфейса и установленных компонент платформы.
Мы выяснили, что использовать библиотеку mxl2xl.dll для файлов современных версий 1С невозможно из-за изменения структуры хранения данных. Для решения задачи открытия файлов MXL в Excel следует использовать современный инструментарий: бесплатную программу «1С:Работа с файлами» для ручной или пакетной конвертации, либо задействовать метод Записать() объекта ТабличныйДокумент непосредственно в коде платформы 1С:Предприятие 8.