Как программно работать с файлами Excel в 1С без установленного Microsoft Office?

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

Одной из наиболее частых задач в практике программиста 1С является импорт или экспорт данных в формат Excel. Традиционный метод через COM-объект (Excel.Application) имеет существенный недостаток: он требует обязательной установки Microsoft Office на стороне клиента или сервера. Это создает проблемы с лицензированием и стабильностью работы серверных процессов. В этой статье мы разберем по шагам, как обойти эти ограничения и организовать работу с файлами .xlsx и .xls, используя исключительно встроенные возможности платформы 1С:Предприятие 8.3 и современные подходы.

Метод 1: Использование объекта ТабличныйДокумент

Начнем с самого простого и доступного способа. Платформа 1С позволяет сохранять и читать табличные документы напрямую в формате Excel. Рассмотрим подробнее, как это реализовать. Этот метод идеально подходит для простых отчетов и выгрузок, где не требуется сложная логика манипуляции ячейками внутри существующего файла.

Проанализируем пример кода для сохранения данных:


ТабДок = Новый ТабличныйДокумент;
// Заполняем ТабДок данными (например, из макета или программно)
Область = ТабДок.ПолучитьОбласть("R1C1:R10C10");
Область.Текст = "Пример данных";

// Сохраняем файл без использования стороннего ПО
ПутьКФайлу = "C:\Temp\Export.xlsx";
ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLSX);

Для чтения файла мы можем использовать метод Прочитать(). Выясним причину, почему это удобно: платформа сама парсит структуру файла и переводит ее в знакомую структуру ячеек 1С. Однако стоит учитывать, что при чтении больших файлов (более 50-100 Мб) этот метод может потреблять значительный объем оперативной памяти.


ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ПутьКФайлу, СпособЧтенияЗначенийТабличногоДокумента.Значение);

// Теперь мы можем перебирать ячейки
Для Строка = 1 По ТабДок.ВысотаТаблицы Цикл
    ЗначениеЯчейки = ТабДок.Область(Строка, 1).Текст;
    // Обработка данных
КонецЦикла;

Метод 2: Использование объекта ЧтениеДанныхXLSX

Начиная с версии платформы 8.3.10, в 1С появился специализированный объект ЧтениеДанныхXLSX. Это наиболее быстрый и эффективный способ работы с современными файлами Excel (формат OpenXML). Разберем по шагам, как работать с этим объектом.

Важно: этот объект работает по принципу последовательного чтения, что позволяет обрабатывать файлы огромного размера с минимальными затратами памяти.

  1. Создаем объект чтения и открываем файл.
  2. Переходим к нужному листу книги.
  3. В цикле считываем строки и колонки.

Посмотрим на пример реализации:


ЧтениеXLSX = Новый ЧтениеДанныхXLSX;
ЧтениеXLSX.Открыть(ПутьКФайлу);

// Получаем список листов
ЛистыКниги = ЧтениеXLSX.ПолучитьЛисты();
Если ЛистыКниги.Количество() > 0 Тогда
    // Выбираем первый лист
    ЧтениеXLSX.ВыбратьЛист(ЛистыКниги[0]);
    
    // Читаем данные построчно
    Пока ЧтениеXLSX.Прочитать() Цикл
        // Получаем значение конкретной колонки по индексу
        Значение = ЧтениеXLSX.ПолучитьЗначение(1); 
        // Здесь выполняется логика загрузки в справочник или документ
    КонецЦикла;
КонецЕсли;

ЧтениеXLSX.Закрыть();

Этот метод является приоритетным для серверного кода, так как он полностью автономен и работает на операционных системах Linux, что критически важно для современных инсталляций 1С.

Метод 3: Использование внешних библиотек через ZIP и XML

Если нам требуется не просто прочитать данные, а создать сложный файл с формулами, защитой листов и специфическим форматированием без MS Office, мы можем рассмотреть структуру самого файла .xlsx. На самом деле, это ZIP-архив, внутри которого находятся XML-файлы. Мы можем программно распаковать его, модифицировать XML и запаковать обратно.

Рассмотрим подробнее логику процесса:

Проанализируем ситуацию, когда необходимо заменить данные в шаблоне. Мы используем объект ЧтениеZipФайла и ЗаписьZipФайла для работы с контейнером, а затем через ЧтениеXML и ЗаписьXML меняем содержимое файлов в папке xl/worksheets/.

Преимущества этого подхода:

Метод 4: Работа через ADO (ActiveX Data Objects)

Этот способ позволяет работать с файлом Excel как с базой данных, используя SQL-запросы. Хотя он требует наличия определенных драйверов в системе (Microsoft Access Database Engine), он все же не требует установки полноценного пакета Office.

Разберем пример кода для получения данных через SQL-запрос:


СтрокаСоединения = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ПутьКФайлу + ";Extended Properties=""Excel 12.0 Xml;HDR=YES"";";
Connection = Новый COMОбъект("ADODB.Connection");
Connection.Open(СтрокаСоединения);

Command = Новый COMОбъект("ADODB.Command");
Command.ActiveConnection = Connection;
Command.CommandText = "SELECT * FROM [Лист1$]";

RecordSet = Command.Execute();

Пока НЕ RecordSet.EOF() Цикл
    Сообщить(RecordSet.Fields.Item(0).Value);
    RecordSet.MoveNext();
КонецЦикла;

Connection.Close();

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

Сравнение методов и рекомендации

Проанализируем, какой метод выбрать в зависимости от задачи:

  1. Если задача "просто выгрузить данные" — используйте ТабличныйДокумент. Это быстро в разработке и надежно.
  2. Если задача "прочитать файл на сервере (в т.ч. Linux)" — ваш выбор ЧтениеДанныхXLSX. Это самый современный и производительный способ.
  3. Если задача "сформировать сложный отчет с графиками и защитой" — используйте готовые библиотеки (например, на языке Python или Java, вызываемые через 1С) или метод прямой манипуляции XML в ZIP-архиве.
  4. Если нужно "быстро выбрать данные по условию" — используйте ADO, если сервер работает под управлением Windows.

Выясним причину частых ошибок при работе с Excel. Основная проблема — это типизация данных. В Excel ячейка может содержать текст, который выглядит как число, или дату в специфическом формате. При использовании ЧтениеДанныхXLSX всегда проверяйте тип полученного значения с помощью функции ТипЗнч(), чтобы избежать ошибок при записи в информационную базу.

Важный момент по производительности: при работе с большими объемами всегда отключайте автоматическое обновление экрана и пересчет формул, если вы все же используете COM-объекты (хотя мы стараемся их избегать). В случае со встроенными методами 1С, старайтесь читать данные порциями и не загружать весь файл в память, если вам нужны только первые 100 строк.

Таким образом, мы выяснили, что современная платформа 1С предоставляет достаточно инструментов для полноценной работы с Excel без привязки к офисным продуктам Microsoft. Это позволяет создавать более надежные, кроссплатформенные и быстрые решения для автоматизации бизнеса.

← На главную