Как загрузить данные из Excel в 1С 7.7 без установки Microsoft Excel?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При стандартной интеграции 1С 7.7 с электронными таблицами разработчики чаще всего используют COM-объект Microsoft Excel через вызов СоздатьОбъект("Excel.Application"). Однако на терминальных серверах, рабочих станциях без офисного пакета или при политике минимизации лицензий данный способ вызывает критическую ошибку выполнения, так как соответствующий OLE-сервер не зарегистрирован в операционной системе.

Рассмотрим несколько надежных и проверенных способов прочитать данные из файла Excel в платформе 1С:Предприятие 7.7 без развертывания пакета Microsoft Office.

Способ 1. Использование библиотеки «Йоксель» (Yoksel)

Библиотека «Йоксель» является одним из самых популярных решений в среде 1С 7.7. Она позволяет напрямую работать с файлами электронных таблиц, открывать их как табличные документы и быстро преобразовывать содержимое в штатную таблицу значений.

Разберем по шагам типовой алгоритм загрузки таблицы Excel с помощью объектов Йокселя:

  1. Подключаем библиотеку и инициализируем объект ТабличныйДокумент.
  2. Открываем файл данных с указанием типа документа (значение 2 соответствует формату Excel).
  3. Создаем конвертер Йоксель.КонвертерВТаблицуЗначений, передаем ему открытый документ и считываем данные в объект ТаблицаЗначений.

Посмотрим на практический пример кода:


ВыбТипФайла = 2; // Формат Excel
ВыбСжиматьКартинки = 1; 
Таб = СоздатьОбъект("ТабличныйДокумент");

Попытка 
    Таб.Открыть(ФайлДанных, ВыбТипФайла, ВыбСжиматьКартинки);
Исключение 
    Сообщить("Ошибка открытия файла: " + ОписаниеОшибки());
    Возврат;
КонецПопытки;

ТЗ = СоздатьОбъект("ТаблицаЗначений");
Конвертер = СоздатьОбъект("Йоксель.КонвертерВТаблицуЗначений");
Конвертер.УстановитьДокумент(Таб);
Конвертер.ОпределятьСтруктуру = 0;
Конвертер.ПроверятьСтруктуру = 0;
Конвертер.СтрокДляОпределенияСтруктуры = 50;

Попытка 
    ТЗ = Конвертер.Загрузить();
Исключение
    Сообщить("Ошибка конвертации данных: " + ОписаниеОшибки());
    Возврат;
КонецПопытки;

После выполнения данного кода в переменной ТЗ находится полностью готовая таблица значений, строки и колонки которой можно обойти стандартными методами платформы.

Способ 2. Подключение через интерфейс ADO (ADODB.Connection)

Файл книги Excel можно рассматривать как реляционный источник данных и обращаться к его листам с помощью стандартных SQL-запросов через технологию ADO. Для этого не требуется сам Excel, но необходимы системные драйверы OLE DB или ODBC.

Проанализируем ключевые технические нюансы работы с ADO в среде 1С 7.7:

  1. Разрядность драйвера: Платформа 1С:Предприятие 7.7 является строго 32-разрядным приложением (x86). При запуске на 64-битных версиях Windows в операционной системе обязательно должен присутствовать 32-разрядный провайдер данных (Microsoft Access Database Engine). 64-битные драйверы платформа 7.7 использовать не сможет.
  2. Выбор провайдера данных: Для устаревшего формата .xls (Excel 97–2003) применяется провайдер Microsoft.Jet.OLEDB.4.0 со свойством Extended Properties="Excel 8.0;". Для современного формата .xlsx необходим провайдер Microsoft.ACE.OLEDB.12.0 (или новее) со свойством Extended Properties="Excel 12.0 Xml;".
  3. Смешанные типы колонок (параметр IMEX): Драйвер базы данных определяет типы колонок автоматически по первым строкам. Если колонка содержит смешанные значения (например, числовые коды и текстовые артикулы), значения нетипичных строк могут вернуться как Null. Чтобы принудительно считывать все ячейки как текст, в строку подключения в параметр Extended Properties обязательно добавляют IMEX=1;.
  4. Синтаксис имени листа: При формировании запроса обращение к имени листа книги оформляется в квадратных скобках с добавлением знака доллара: [Лист1$].

Способ 3. Использование специализированных внешних компонент

Для прямого разбора двоичных файлов Excel разработаны легковесные внешние компоненты, работающие без зависимостей от установленного офисного пакета (например, библиотека MiracleV8).

Разберем пример чтения данных с последовательным обходом ячеек через внешнюю компоненту:


Если ЗагрузитьВнешнююКомпоненту("MiracleV8.dll") = 0 Тогда
    Сообщить("Не удалось загрузить компоненту MiracleV8.dll!");
    Возврат;
КонецЕсли;

XLS = СоздатьОбъект("AddIn.MiracleClass"); 
XLS.ReadXLS(ФормИмяФайлаДанных); 

ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Код");
ТЗ.НоваяКолонка("Наименование");

Для СчСтрок = 1 По КонСтрока Цикл  
    Код = Прав("000" + СокрЛП(XLS.ReadCell(1, СчСтрок, 1)), 3);
    Наименование = СокрЛП(XLS.ReadCell(1, СчСтрок, 2)); 
    
    ТЗ.НоваяСтрока(); 
    ТЗ.Код = Код;
    ТЗ.Наименование = Наименование;
КонецЦикла;

XLS = 0;

Обратите внимание: При использовании подобных компонент номер листа и граничные строки обычно задаются явно или определяются предварительным сканированием диапазона.

Особенности обработки формата XLSX

Большинство старых библиотек и внешних компонент для 1С 7.7 проектировались под двоичный формат BIFF8 (файлы с расширением .xls). Если на вход поступает современный файл .xlsx (OpenXML), они могут работать некорректно или вызывать ошибку чтения.

В такой ситуации рекомендуем следующие подходы:

  1. Пакетная конвертация в фоновом режиме: При наличии бесплатного пакета LibreOffice или OpenOffice файл можно автоматически перевести в текстовый формат (CSV) или DBF без открытия графического окна с помощью ключей командной строки: --headless --convert-to csv. Полученный результат 1С 7.7 моментально считывает встроенным объектом СоздатьОбъект("Текст").
  2. Прямой разбор XML через MSXML: Файл .xlsx представляет собой ZIP-архив. Распаковав его с помощью любой консольной утилиты, можно напрямую прочитать структуры xl/sharedStrings.xml (таблица общих строк) и xl/worksheets/sheet1.xml (ячейки листа) стандартным системным объектом MSXML2.DOMDocument. Этот способ исключает любые проблемы с драйверами и разрядностью операционной системы.
← На главную