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

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

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

Особенности метода «Прочитать()» для табличного документа

Основной инструмент, который мы будем использовать — это объект ТабличныйДокумент. Метод Прочитать() позволяет загрузить содержимое файла непосредственно в память 1С. Рассмотрим базовый синтаксис:

Важно понимать: при загрузке файла, содержащего несколько листов, 1С объединяет их в одном объекте ТабличныйДокумент. Листы располагаются друг под другом, но платформа создает специальные именованные области, которые соответствуют именам листов в исходном файле Excel. Это позволяет нам обращаться к конкретному листу, не перебирая все строки документа.

Способ 1: Использование коллекции областей (для старых версий платформы)

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

Рассмотрим пример кода, который загружает файл и обращается к первому листу:


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

// Получаем количество листов (областей, созданных платформой)
КоличествоЛистов = ТабДок.Области.Количество();

// Обращаемся к первому листу по индексу
Если КоличествоЛистов > 0 Тогда
    ОбластьЛиста = ТабДок.ПолучитьОбласть(ТабДок.Области[0].Имя);
    // Далее работаем с ОбластьЛиста как с отдельным табличным документом
КонецЕсли;

Выясним причину использования СпособЧтенияЗначенийТабличногоДокумента.Текст. Если мы выберем этот параметр, 1С прочитает данные именно так, как они отображаются в ячейках (с сохранением ведущих нулей в артикулах и форматированием дат). Если же нам нужны «чистые» числа для расчетов, следует использовать СпособЧтенияЗначенийТабличногоДокумента.Значение.

Способ 2: Использование метода «ПолучитьИменаЛистов()» (современный подход)

Начиная с версии платформы 8.3.10, разработчикам стал доступен гораздо более элегантный метод. Теперь нам не нужно загружать весь тяжелый файл в ТабличныйДокумент только для того, чтобы узнать структуру его листов. Разберем по шагам, как это работает.

  1. Сначала мы получаем массив имен всех листов файла.
  2. Выбираем нужное имя (например, по индексу или поиском подстроки).
  3. Загружаем только необходимые данные.

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


ПутьКФайлу = "C:\Data\Import.xlsx";
// Получаем имена листов без загрузки всего документа
МассивИменЛистов = ТабличныйДокумент.ПолучитьИменаЛистов(ПутьКФайлу);

Если МассивИменЛистов.Количество() > 0 Тогда
    ИмяНужногоЛиста = МассивИменЛистов[0]; // Берем первый лист
    
    ТабДок = Новый ТабличныйДокумент;
    // Читаем файл
    ТабДок.Прочитать(ПутьКФайлу);
    
    // Выделяем область конкретного листа по его имени
    НужнаяОбласть = ТабДок.ПолучитьОбласть(ИмяНужногоЛиста);
    
    // Теперь НужнаяОбласть содержит данные только выбранного листа
КонецЕсли;

Преимущества кроссплатформенности

Проанализируем ситуацию: ваша база данных работает на сервере под управлением Linux. В этом случае использование Excel.Application через COM-соединение невозможно в принципе. Использование ТабличныйДокумент.Прочитать() — это «родной» механизм 1С, который:

Ограничения и рекомендации по производительности

Несмотря на удобство, метод имеет свои нюансы. Разберем важные моменты, которые стоит учитывать при проектировании загрузки:

Объем оперативной памяти: Метод Прочитать() при работе с форматом XLSX (который по сути является сжатым XML) потребляет значительный объем памяти, так как 1С восстанавливает все форматирование, стили и объединения ячеек. Если ваш файл содержит более 100-200 тысяч строк, сервер может столкнуться с дефицитом памяти.

Совет: Если вам нужно прочитать только огромные массивы «сырых» данных (тысячи строк текста или чисел) без учета оформления, рассмотрите возможность использования ЧтениеXML (для XLSX) или внешних библиотек на языке Java/Python, вызываемых через ЗапуститьПриложение, но для большинства повседневных задач ТабличныйДокумент является оптимальным выбором.

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

← На главную