Внешняя нативная компонента 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 [, Range])

 

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

Параметры:

  • ИндексЛиста: Число, обязательный. Номер листа, нумерация с 0.
  • Формат: Строка, обязательный. Задаёт формат результата:
    • "ТаблицаЗначений" / "ValueTable" — внутренний формат 1С, декодируется функцией ЗначениеИзСтрокиВнутр()
    • "JSON" — массив массивов для преобразования через СериализаторXDTO.ПрочитатьJSON()
  • Диапазон: Строка, необязательный. Диапазон ячеек в формате Excel (например, "A1:C10"). Если не указан — читается весь лист (поведение по умолчанию). Возвращаются только заполненные строки в пределах указанного диапазона. Поддерживаемые форматы:
    • "A1:A10" — одна колонка, 10 строк
    • "B1:B1" — одна ячейка
    • "A1:C10" — блок 3 колонки × 10 строк
    • "AA1:AA100" — колонка с двубуквенным индексом

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

Пример:

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

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

// Чтение одной колонки (например, только артикулы из колонки B)
СтрокаВнутр = xls.ПрочитатьЛист(0, "ТаблицаЗначений", "B1:B100");
Артикулы = ЗначениеИзСтрокиВнутр(СтрокаВнутр);

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

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

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

// Чтение диапазона как JSON
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(xls.ПрочитатьЛист(0, "JSON", "A1:C10"));
Массив = Сериализатор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С: " + ОписаниеОшибки());
КонецПопытки;

Ссылка на github.com

 

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

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

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

См. также

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

Внешняя компонента позволяет работать c TWAIN-совместимым оборудованием (сканерами, камерами) . Полностью совместима со стандартной TWAIN-компонентой из БСП и может применяться как ее замена без изменения вызовов, при этом может работать с 64-разрядной платформой, а так же имеет расширенную функциональность, например, сохранение результата непосредственно в PDF без использования сторонних утилит. Прекрасно работает на сервере, тонком клиенте и веб-клиенте (проверена работа в браузерах Google Chrome, Mozilla Firefox и Microsoft Internet Explorer).

5084 руб.

12.05.2020    34285    146    100    

101

Разработка внешних компонент 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    57446    11    71    

48

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

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

03.04.2026    3198    SultanovStas    8    

23

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

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

14.01.2025    7353    bayselonarrend    17    

54

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

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

04.12.2024    12720    kovalevdmv    29    

83

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

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

26.01.2024    12588    starik-2005    40    

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

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

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


от 3х секунд и выше, а если добавлять в ТЗ по одной строчке, то совсем долго получается
3. RustIG 1979 04.07.26 09:46 Сейчас в теме
(2)
нужно быстро тонны файлов с гигантскими прайсами

а что за бизнес такой?
4. skyadmin 104 04.07.26 13:29 Сейчас в теме
(3) такой бизнес, непрерывно анализируется рынок по всем поставщикам на автомате, у меня в профиле есть расширение, которое выводит эти прайсы в любой документ, как один из вариантов использования
5. RustIG 1979 04.07.26 13:54 Сейчас в теме
(4) МайкроCофт впереди планеты всей - оптимизируют работу со своими приложениями МС Эксель....
какая потребность у клиентов видеть цены из тонны файлов эксель?
а остаток на складе, а время доставки, а качество товара и надежность поставщиков учитывается (доля брака)?
цены могут меняться каждый час по разным причинам.... они всегда уточняются на момент заказа....
я думал, вы скажете, что у вас дилерская автосеть - нужно загружать цены на запчасти...
но даже подобную задачу, я бы решал по-другому
6. skyadmin 104 04.07.26 14:30 Сейчас в теме
(5) Все просто, если есть в последнем прайсе значит есть остаток, если нет то удаляется из регистра. Менеджер решает какую скидку дать, и должен видеть сразу у кого и почем в прайсе, может быть заказ под заказ. Не запчасти, но ассортимент огромный.
7. RustIG 1979 04.07.26 18:44 Сейчас в теме
(6) я так и не понял... откуда у вас тонна файлов и зачем...
8. skyadmin 104 04.07.26 22:54 Сейчас в теме
(7) из разных источников загружаются на автоматом. Легаси конфигурация, 10 лет переписывалась, используется дофига где... от автоматической установки цен до автоматических заказов, 99% работы на автомате или одним нажатием, в офисе 1,5 человека, работают за десятерых, нет времени звонить и что-то уточнять да и не нужно...
11. Baronello 35 06.07.26 10:41 Сейчас в теме
(7) Те же отчеты комиссионера от Озон могут быть неприлично огромными. Коллега для начала написал версию с обходом ячеек через ком объект, оно отказалось вменяемо работать по скорости и переделал через ТабДок.
15. RustIG 1979 06.07.26 12:47 Сейчас в теме
(11) допустим, я тоже в свое время занимался загрузкой из Озон отчетов комиссионера, использовал разные способы загрузки Эксель... но у меня не было "тонны эксель", и у Озон один конкретный формат, а не два разных - и загрузка была вменяемой... спрашивается, в чем профит этой компоненты ? автор указал, что было 3 сек, стало 1 сек... Когда грузятся "тонна" эксель, потери времени будут , НАВЕРНОЕ , уже на этапе переключения между файлами эксель... я за то, чтобы критически ко всему относиться, тем более к загрузке из эксель, и тем более к внешним компонентам (исходный код которых неизвестен)
16. Baronello 35 06.07.26 12:51 Сейчас в теме
(15) Я слабо представляю необходимость такой компоненты, когда есть табдок.загрузить() и можно получить ТЗ построителем, просто ответил где искать огромные эксели.
18. RustIG 1979 06.07.26 12:57 Сейчас в теме
(16) огромные эксели - это не мой вопрос. Хотя я по этой теме тоже могу развернуться и написать "как надо"...
у меня вопрос был - откуда "тонна" эксель....не в смысле объема, а в смысле кол-ва файлов

да , и , если критически относиться к задаче - если эксель совсем огромная для вашей памяти сервера (или смартфона-андроида)- то целый лист грузить в ТЗ - просто не хватит памяти.... Думается мне, что построчно вытягивать данные из эксель памяти хватит... Ну тут, не могу утверждать точно - нужны какие-то пробы/исследования/факты. Пока только умозрительно и гипотетически рассуждаю - всю жизнь загружал данные построчно или обрабатывал построчно
19. Baronello 35 06.07.26 13:12 Сейчас в теме
(18) Курсором через COM объект сразу и проблемы с COM и проблемы со скоростью обхода через курсор, он люто тормознутый. Платформенные методы тут работают в сравнении моментально.
20. RustIG 1979 06.07.26 13:25 Сейчас в теме
(19) Илья, наверное, вы правы. Я давно через Ком не загружал эксель. Наверное, если бы столкнулся с проблемой производительности, то решал бы ее точечно.
Почему так говорю - потому что сама технология Ком - имеет свои плюсы и минусы. Тащить данные из соседней 1С - можно и через Ком - у меня есть работа на эту тему - Сравнение итогов по регистрам - особенно полезно после свертки рабочей базы сравнить с предыдущей версией базы все итоги по регистрам.
Платформенные методы загрузки Эксель давно не использую - есть у меня последние статьи на тему - как я загружаю из эксель - файлы с 12000 строками, 30ью колонками...
В целом, мы ушли в сторону
24. Baronello 35 06.07.26 15:18 Сейчас в теме
(20) Звучит уже как БД на основе Excel, можно и ADODB коннектор натравить и читать запросами.
21. skyadmin 104 06.07.26 14:21 Сейчас в теме
(16) Например каждые 5 минут дергается файл с веб-сервера, который в заголовках не отдает дату файла и определить ее можно только посмотрев в шапке "Дата прайса:". Что лучше каждый раз делать запросы на сервер 1с или прочитать одну ячейку через ВК, чтобы определить нужно загружать этот прайс или нет?
23. Baronello 35 06.07.26 15:10 Сейчас в теме
(21)
Уот так
Хеширование = Новый ХешированиеДанных(ХешФункция.MD5);
Хеширование.ДобавитьФайл(ПутьКСкачанномуФайлу); // Работает быстро, не грузит весь файл в ОЗУ
ТекущийХеш = СтрСоединить(ПолучитьHexСтрокуИзМассива(Хеширование.ХешСумма), "");

Или чтение XLSX как ZIP-архива + XML
25. skyadmin 104 06.07.26 16:45 Сейчас в теме
(23) Файл не XLSX а XLS, тогда нужно еще и хеши где-то записывать.
Можно по разному, у меня общий модуль по работе с excel, со всеми возможными вариантами имеется, включая фиксы файлов, извлечение текста из фигур и т.п. ВК все равно не покрывает все потребности.
12. CheBurator 3234 06.07.26 10:53 Сейчас в теме
(5) Вполне себе представляю, описанное в (0). У меня было аналогичное (но гораздо меньше масштабами), в 2004-2007гг. Фармация, опт. Постоянная в автомате загрузка прайсов поставщиков (штук 15, потом редуцировалось до 5), три раза в рабочее время. Выбраковка фальсификатов, обновление собственного сводного прайса (перевыставление), контроль и сравнение реальных рыночных цен. Актуализация текущих прайсов поставщиков, контроль остатков. На основании этой инфы делается автозаказ по нескольким критериям для поставщиков итд итп.
Так что вполне.
17. RustIG 1979 06.07.26 12:51 Сейчас в теме
(12)
гораздо меньше масштабами
так в этом и весь цимес
у многих так - когда не "тонна" эксель - а разумное кол-во поставщиков, надежных, проверенных, форматы эксель устоявшиеся, проверенные....под каждый формат свой загрузчик....
в данной сатье смутило, что было 3 сек, стало 1 сек - вот у вас 15 эксель - разница будет несущественной....
да и бизнес - как и бизнес-процесс с "тонной" эксель - это что такое?
просто критически отнесся к описанию задачи - не более
9. littlegeneva 05.07.26 11:59 Сейчас в теме
Прекрасная компонента. Использую ее для загрузки старых файлов *.XLS которые встроенный в 1С обработчик чтения через "ТабличныйДокумент" не поддерживает. Посмотрел на github описание, не нашел методов чтения по ячейкам. Не планируется реализовать?
10. skyadmin 104 05.07.26 18:55 Сейчас в теме
(9) Добавил в функцию ПрочитатьЛист необязательный параметр Диапазон, позволяет прочитать файл не целиком, примеры добавлены в описание. Спасибо за позитивный отзыв.
13. skyadmin 104 06.07.26 10:53 Сейчас в теме
(10) Еще исправлены проблемы с кодировками, и краш при чтении файлов с нестандартной структурой BIFF
14. CheBurator 3234 06.07.26 10:56 Сейчас в теме
(0) а в 7.7 эту компоненту удастся использовать? старый формат быстро читается Йокселем, а вот новый - не поддерживается...
22. skyadmin 104 06.07.26 14:25 Сейчас в теме
(14) Короткий ответ: нет, напрямую использовать эту компоненту в 1С 7.7 не получится.

Компонента xls21c разработана специально под архитектуру 1С:Предприятие 8 (использует Native API, заточенную под платформу 8.х). Внутренние механизмы взаимодействия с внешними компонентами в 1С 7.7 и 1С 8.х принципиально отличаются.
26. skyadmin 104 06.07.26 19:12 Сейчас в теме
(22) Но у меня есть консольная утилита, написанная на C# которая использует другие библиотеки но тоже всеядная, ее я использую когда ВК не сработала, она массив таблиц через XML файл, в который конвертирует XLS, нужен кажется .NET10

Функция xls2xml(Знач ПутьКФайлуExcel) Экспорт
	СписокЛистов = Новый СписокЗначений;
	
	ПутьККонвертеру ="xls2xml.exe";
	ФайлКонвертера = Новый Файл(ПутьККонвертеру);
	Если ФайлКонвертера.Существует() Тогда
		ПутьXML = ПолучитьИмяВременногоФайла("XML");
		Результат = ОбщегоНазначения.ВыполнитьПрограммуWindows(ПутьККонвертеру, """" +ПутьКФайлуExcel + """" + " " + ПутьXML);
		
		Если ТипЗнч(Результат) = Тип("Массив") Тогда
			Попытка
				ЧтениеXML = Новый ЧтениеXML;
				ЧтениеXML.ОткрытьФайл(ПутьXML);
				СписокЛистов = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
				ЧтениеXML.Закрыть();
				УдалитьФайлы(ПутьXML);
			Исключение
				ОбщегоНазначения.СообщитьИнформациюПользователю("Ошибка парсинга XML: " + Результат[0]); 
			КонецПопытки;
		Иначе
			Возврат Неопределено;
		КонецЕсли;

	КонецЕсли;
	
	Возврат СписокЛистов;
КонецФункции
Показать



ОбщегоНазначения.ВыполнитьПрограммуWindows нужно заменить на свою, может пригодиться
Прикрепленные файлы:
xls2xml.rar
27. Tahallus 441 06.07.26 23:08 Сейчас в теме
9 релизов за день с исправлениями ошибок, да здравствует вайбкодинг
28. skyadmin 104 07.07.26 10:30 Сейчас в теме
(27) Это не исправление ошибок, это патчи библиотеки libxls для поддержки кривых XLS сохраненных из 1С
29. лонли-локли 08.07.26 15:47 Сейчас в теме
делаю загрузку файла примерно 20к строк. код как в образце
xls = Новый("AddIn.xls21c.xls21c");

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

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


код выполняется на сервере. временный файл тоже записан на сервере
на строке xls.ОткрытьФайл(ИмяВременногоФайла); висит примерно 3 минуты, дальше все читает быстро. почему может быть такое долгое открытие файла?
30. skyadmin 104 08.07.26 16:26 Сейчас в теме
(29) Попробуйте на клиенте, возможно дело в окружении сервера, не могу сказать.
31. лонли-локли 08.07.26 16:35 Сейчас в теме
(30) на клиенте к сожалению никак не подойдет, потому что файлы нужно загружать регламентами
Для отправки сообщения требуется регистрация/авторизация