Внешняя нативная компонента xls21c для чтения XLS/XLSX файлов

03.07.26

Разработка - Разработка внешних компонент

Нативная внешняя компонента для 1С 8 для чтения файлов Excel без установленного Excel и делает это быстро, файл 68МБ загружается в таблицу значений ~1 секунду. Компонента поддерживает чтение двух форматов: Excel 2007+ и Excel 97-2003 Формат файла определяется автоматически по сигнатуре (первые 8 байт файла), а не по расширению. Позволяет открывать XLS и XLSX файлы и получать содержимое листов в виде ТаблицыЗначений или JSON-массива.

xls21c

Нативная внешняя компонента для 1С 8 для чтения файлов Excel. Позволяет открывать XLS и XLSX файлы и получать содержимое листов в виде ТаблицыЗначений или JSON-массива.

Поддерживает работу в:

  • Windows x86
  • Windows x64

Форматы файлов

Компонента поддерживает чтение двух форматов:

Формат Расширение Библиотека Примечания
Excel 2007+ .xlsx OpenXLSX Полная поддержка типов данных
Excel 97-2003 .xls libxls Все значения читаются как строки

Формат файла определяется автоматически по сигнатуре (первые 8 байт файла), а не по расширению.


Кодировка текста

Все текстовые данные из файлов Excel конвертируются из UTF-8 (внутренний формат библиотек) в UTF-16 (внутренний формат 1С). Кириллические имена файлов в путях поддерживаются корректно — при необходимости файл временно копируется в системную папку с ASCII-именем.

Использование

 

Подключается как обычная нативная ВК:

ПутьКВК = "C:\path\to\xls21c.dll";

Если Не ПодключитьВнешнююКомпоненту(ПутьКВК, "xls21c", ТипВнешнейКомпоненты.Native) Тогда
    Предупреждение("Не удалось подключить внешнюю компоненту " + ПутьКВК);
    Возврат;
КонецЕсли;

После подключения доступен создание объект внешней компоненты:

xls = Новый("AddIn.xls21c.xls21c");

Свойства объекта

 

Версия / Version

 

Строка, только чтение. Версия компоненты.


БросатьОписаниеОшибки / ThrowErrorDescription

 

Булево, чтение/запись. По умолчанию Ложь.

Флаг, нужно ли при возникновении исключения добавлять текстовое описание ошибки штатным для ВК методом AddError. Если значение свойства Ложь, то текст ошибки не будет выдавать в исключении (будет просто штатное "Ошибка при вызове метода объекта"). Описание ошибки в этом случае можно прочитать в свойстве ОписаниеОшибки.


ОписаниеОшибки / ErrorDescription

 

Строка. Только чтение. Содержит текстовое описание последней ошибки.

Попытка
    xls.ОткрытьФайл("D:\Файл.xlsx");
Исключение
    Сообщить(xls.ОписаниеОшибки);
КонецПопытки;

ФайлОткрыт / IsFileOpen

 

Булево. Только чтение. Показывает, открыт ли в данный момент файл Excel.


КоличествоЛистов / SheetCount

 

Число. Только чтение. Возвращает количество листов в открытом файле.


Методы объекта

 

ОткрытьФайл(ИмяФайла) / OpenFile(FileName)

 

Открывает файл Excel. Формат определяется автоматически по сигнатуре файла (ZIP для xlsx, OLE2 для xls). Если ранее был открыт другой файл — он закрывается автоматически.

Параметры:

  • ИмяФайла: Строка, обязательный. Путь к файлу Excel.

Возвращаемое значение — нет. При ошибке выбрасывает исключение.

Пример:

xls = Новый("AddIn.xls21c.xls21c");
xls.ОткрытьФайл("D:\База\Прайс.xlsx");
xls.ОткрытьФайл("D:\База\Заказ.xls");

ЗакрытьФайл() / CloseFile()

 

Закрывает ранее открытый файл и освобождает память. Параметров нет. Возвращаемого значения нет.

Пример:

xls.ЗакрытьФайл();

ПолучитьИмяЛиста(Индекс) / GetSheetName(Index)

 

Возвращает имя листа по его порядковому номеру.

Параметры:

  • Индекс: Число, обязательный. Номер листа, нумерация с 0.

Возвращаемое значение: Строка — имя листа.

Пример:

xls = Новый("AddIn.xls21c.xls21c");
xls.ОткрытьФайл("D:\База\Прайс.xlsx");

Для Индекс = 0 По xls.КоличествоЛистов - 1 Цикл
    Сообщить("Лист " + Индекс + ": " + xls.ПолучитьИмяЛиста(Индекс));
КонецЦикла;

ПрочитатьЛист(ИндексЛиста, Формат) / ReadSheet(SheetIndex, Format)

 

Читает содержимое указанного листа и возвращает данные в выбранном формате.

Параметры:

  • ИндексЛиста: Число, обязательный. Номер листа, нумерация с 0.
  • Формат: Строка, обязательный. Задаёт формат результата:
    • "ТаблицаЗначений" / "ValueTable" — внутренний формат 1С, декодируется функцией ЗначениеИзСтрокиВнутр()
    • "JSON" — массив массивов для преобразования через СериализаторXDTO.ПрочитатьJSON()

Возвращаемое значение: Строка с данными листа. При ошибке выбрасывает исключение.

Пример:

xls = Новый("AddIn.xls21c.xls21c");
xls.ОткрытьФайл("D:\База\Прайс.xlsx");

// Получение как ТаблицаЗначений
СтрокаВнутр = xls.ПрочитатьЛист(0, "ТаблицаЗначений");
ТЗ = ЗначениеИзСтрокиВнутр(СтрокаВнутр);

// Получение как JSON
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(xls.ПрочитатьЛист(0, "JSON"));
Массив = СериализаторXDTO.ПрочитатьJSON(Чтение);

Формат выходных данных

 

ТаблицаЗначений

 

При выборе формата "ТаблицаЗначений" возвращается строка, которая методом ЗначениеИзСтрокиВнутр() преобразуется в ТаблицуЗначений.

Структура таблицы:

№ колонки Имя колонки Тип значения Описание
0 НомерСтроки Число Порядковый номер строки (1, 2, 3, ...)
1 k_1 Строка Значение первой колонки Excel
2 k_2 Строка Значение второй колонки Excel
... k_N Строка ...
N k_N Строка Значение последней колонки Excel

Все значения ячеек Excel преобразуются в строки. Пустые ячейки содержат Null. Колонка "НомерСтроки" добавляется автоматически и содержит порядковый номер строки начиная с 1

Пример результата для файла с 3 колонками и 2 строками данных:

НомерСтроки | k_1        | k_2   | k_3
1            | Наименование | Артикул | Цена
2            | Товар       | A001   | 150.00

JSON

 

При выборе формата "JSON" возвращается строка, которая через XDTO преобразуется в массив. Первый элемент массива — массив с именами колонок. Последующие элементы — массивы со значениями строк.

[
  ["НомерСтроки", "k_1", "k_2", "k_3"],
  [1, "Наименование", "Артикул", "Цена"],
  [2, "Товар", "A001", "150.00"]
]

Преобразование типов ячеек:

  • Текстовые значения — jxs:string
  • Числовые значения — jxs:decimal
  • Пустые ячейки — jv8:Null

Полный пример

 

// Подключение компоненты
Если Не ПодключитьВнешнююКомпоненту("C:\path\to\xls21c.dll", "xls21c", ТипВнешнейКомпоненты.Native) Тогда
    Предупреждение("Не удалось подключить xls21c");
    Возврат;
КонецЕсли;

xls = Новый("AddIn.xls21c.xls21c");

// Открытие файла
xls.ОткрытьФайл("D:\База\Прайс.xlsx");

// Вывод информации о листах
Сообщить("Количество листов: " + xls.КоличествоЛистов);
Для Индекс = 0 По xls.КоличествоЛистов - 1 Цикл
    Сообщить("  Лист " + Индекс + ": " + xls.ПолучитьИмяЛиста(Индекс));
КонецЦикла;

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

// Закрытие файла
xls.ЗакрытьФайл();

Обработка ошибок

Попытка
    xls.ОткрытьФайл("D:\База\Существующий.xlsx");
Исключение
    Сообщить("Ошибка VK: " + xls.ОписаниеОшибки());
    Сообщить("Ошибка 1С: " + ОписаниеОшибки());
КонецПопытки;

Скачать dll можно на github

Вступайте в нашу телеграмм-группу Инфостарт

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Разработка внешних компонент POS терминал Рабочее место Розничная торговля Программист Пользователь 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Рестораны, кафе и фаст-фуд Реклама, PR и маркетинг Управленческий учет Платные (руб)

Медиадисплей покупателя может отображать текущую покупку на кассовом месте, показывать видеорекламу, баннеры, во время простоя разворачивать рекламу на весь экран. Экран можно использовать в качестве графического меню-борда в кафе и видеовывески. В качестве устройства отображения можно использовать Android-планшеты, смарт-телевизоры с Android, мониторы или проекторы под управлением Windows или Linux-компьютера. Linux-версия успешно запускается на одноплатных компьютерах Raspberri Pi и Orange Pi. Настраивается ЛЮБОЙ ДИЗАЙН экрана при помощи встроенного графического редактора! Решение можно масштабировать от одного экрана до тысяч экранов с централизованным управлением.

18300 руб.

30.05.2017    57360    11    71    

48

Разработка внешних компонент Программист 1С 8.3 Бесплатно (free)

В современных корпоративных решениях на платформе 1С:Предприятие 8.3 всё чаще возникает потребность в визуальном моделировании и автоматизации бизнес-процессов с использованием нотации BPMN 2.0. Стандартные средства платформы не предоставляют полноценного редактора BPMN, однако интеграция открытой библиотеки bpmn-js позволяет реализовать интерактивное моделирование бизнес-процессов непосредственно в 1С. В статье рассмотрены архитектура решения, пошаговая инструкция по сборке библиотеки из исходников для WebKit, а также примеры программного взаимодействия между 1С и JavaScript.

03.04.2026    2968    SultanovStas    8    

23

Разработка внешних компонент Системный администратор Программист Стажер Бесплатно (free)

Библиотека для работы с базами SQLite из 1С на основе внешней компоненты. Для Linux и Windows, бесплатно и с открытым исходным кодом!

14.01.2025    7208    bayselonarrend    17    

54

Разработка внешних компонент Программист 1С:Предприятие 8 Россия Бесплатно (free)

В статье описывается приложение-конструктор внешних компонент (native API). Конструктор упрощает процесс разработки за счет удобного добавления всех нужных функций и процедур в графическом режиме, с указанием их параметров и типов параметров. На выходе приложение генерирует готовый код на С++ и Rust и позволяет сразу приступить к реализации, без настройки API компоненты вручную.

04.12.2024    12450    kovalevdmv    29    

83

Разработка внешних компонент Механизмы платформы 1С Программист Стажер 1С:Предприятие 8 Бесплатно (free)

Некоторые практические аспекты создания внешних компонент на языке С++ для платформы 1С 8.3++.

26.01.2024    12431    starik-2005    40    

49

Инструментарий разработчика Разработка внешних компонент Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пример взаимодействия 1С с Apach Kafka посредством внешней компоненты, разработанной на основе официальной библиотеки librdkafka (the Apache Kafka C/C++ client library).

22.11.2023    8780    152    ivan1703    26    

45
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SerVer1C 1104 03.07.26 10:40 Сейчас в теме
Плюс!
а чем вас встроенный ридер не устроил?
2. skyadmin 80 03.07.26 11:06 Сейчас в теме
(1) Когда преобразовать в таблицы значений нужно быстро тонны файлов с гигантскими прайсами, то разница в скорости имеет значение, самым быстрым было через COMОбъект("Excel.Application") как-то так

Результат = Новый Структура;
ТаблицаЗначений = Новый ТаблицаЗначений;
Для Кол = 0 По МаксКолонок Цикл ТаблицаЗначений.Колонки.Добавить("Колонка" + Формат(Кол, "ЧГ=")); КонецЦикла;
Для Стр = 1 По МаксСтрок Цикл НоваяСтрока = ТаблицаЗначений.Добавить(); КонецЦикла;

Область = Лист.Range(Лист.Cells(1,1), Лист.Cells(МаксСтрок, МаксКолонок));
Значение = Область.Value;
Если ЗначениеЗаполнено(Значение) Тогда
	МассивКолонок = Значение.Выгрузить();
	Для Кол = 0 По МаксКолонок - 1 Цикл
		ТаблицаЗначений.ЗагрузитьКолонку(МассивКолонок[Кол], "Колонка" + Формат(Кол, "ЧГ="));
	КонецЦикла;
	Результат.Вставить(ИмяЛиста, ТаблицаЗначений);
КонецЕсли;
КонецЦикла;
Показать


от 3х секунд и выше, а если добавлять в ТЗ по одной строчке, то совсем долго получается
Для отправки сообщения требуется регистрация/авторизация