Почему не получается использовать ТабличныйДокумент для работы с Excel?

01.12.23

Интеграция - Загрузка и выгрузка в Excel

Трудности загрузки/выгрузки эксельных прайсов.

Одним из полезных нововведений на платформе 8.3.6 стала возможность возможность импорта содержимого из файлов в форматах XLS (Microsoft Excel 97), Microsoft Office OpenXML (Microsoft Excel 2007- 2010) и ODS (OpenDocument) в табличный документ.
На платформе 8.3.10 появилась возможность считывания данных с отдельных листов книги EXCEL.
Данная возможность доступна как в интерактивном режиме, так и из встроенного языка.
Реализована поддержка вставки из буфера обмена областей, скопированных из Microsoft Excel и OpenOffice Calc.
Реализация импорта из EXCEL на встроенном языке стала возможна в результате нововведений в функционал объекта "ТабличныйДокумент":
Для метода "Прочитать" объекта "ТабличныйДокумент" реализован параметр "СпособЧтенияЗначений" (Новое системное перечисление "СпособЧтенияЗначенийТабличногоДокумента"). (с) Загрузка из EXCEL


<СпособЧтенияЗначений> (необязательный)

Тип: СпособЧтенияЗначенийТабличногоДокумента.
Определяет, каким образом нужно интерпретировать значения, считываемые из исходного документа XLS, XLSX или ODS.
При загрузке табличного документа из формата Excel 97 - 2010 и OpenOffice Calc, в случае если в ячейке исходного документа содержалось значение типа Дата или Число, то в ячейку результирующего табличного документа это значение попадает в зависимости от значения этого параметра.
Значение по умолчанию: Текст.


Построитель = Новый ПостроительОтчета;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(тз);
Построитель.Выполнить();
Построитель.Вывести();


Так вот. И в excel и в mxl ячейка может содержать значение и иметь формат представления. Проблема в том, что СКД при выводе значений в табличный документ выводит только представление... 

Проблема при сохранении табличного документа в файл xlsx

Если в ячейке будет код номенклатуры с лидирующими нулями - при экспорте в эксель значение ячейки их обрежет,
например было "00246100" стало "246100":

ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.Область(1,1).Текст = "Номенклатура";
ТабДокумент.Область(1,2).Текст = "Артикул";
ТабДокумент.Область(2,1).Текст = "NSIN0001130294";
ТабДокумент.Область(2,2).Текст = "00246100";
ИмяФайлаXLSX = ПолучитьИмяВременногоФайла("xlsx");
ТабДокумент.Записать(ИмяФайлаXLSX, ТипФайлаТабличногоДокумента.XLSX);
ЗапуститьПриложение(ИмяФайлаXLSX);

Выведет:

При этом в представлении всё верно...

И да, если переименовать xlsx в zip и открыть архиватором sheet1.xml - то там будет именно "246100".


Конечно, есть ещё вариант ручной установки значения ячейки таб. документа, и он работает.
На клиенте...

	#Если ТолстыйКлиентОбычноеПриложение Тогда
		// В экселе значение ячейки отличается от представления (обрезает лидирующие нули и т.п.)
		Область = ТабДок.Область(1,1,ТабДок.ВысотаТаблицы, ТабДок.ШиринаТаблицы);
		Область.Защита = Ложь;
		Область.СодержитЗначение = Истина;
	#КонецЕсли

Но #НаСервере установка свойства СодержитЗначение приводит к очистке. И в справке про это ничего нет...

Для регламентных не годится.

Проблема при загрузке табличного документа из файла xlsx

При загрузке файла экселя, сформированного в других языках программирования, содержимое может вообще не прочитаться (если верить гуглу при поиске заголовков этого файла выдаёт Open XML SDK 2.5),
например:

ИмяФайлаXLSX = ПолучитьИмяВременногоФайла("xlsx");
Ссылка = "https://raw.githubusercontent.com/kuzyara/ConvertCSV/master/priceberg.xlsx";
КопироватьФайл(Ссылка, ИмяФайлаXLSX);
//ЗапуститьПриложение(ИмяФайлаXLSX);
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.Прочитать(ИмяФайлаXLSX, СпособЧтенияЗначенийТабличногоДокумента.Значение);
ЗаполненоЯчеек = 0;
Для НомерСтроки = 1 По ТабДокумент.ВысотаТаблицы Цикл
	Для НомерСтолбца = 1 По ТабДокумент.ШиринаТаблицы Цикл
		ТекЗначение = ТабДокумент.Область(НомерСтроки,НомерСтолбца).Текст;
		Если НЕ ПустаяСтрока(ТекЗначение) Тогда
			ЗаполненоЯчеек = ЗаполненоЯчеек + 1;
		КонецЕсли;
	КонецЦикла;
КонецЦикла;
Сообщить("Заполнено ячеек: " + ЗаполненоЯчеек);
// Выведет:
//
// Заполнено ячеек: 0

В режиме предприятия (меню Файл - Открыть) это пустой таб. документ
с 1026 столбца...

Хотя в экселе файл открывается прекрасно:

Нюансы (различия) чтения методом OLE и ТабДок

 

//COM
	Excel = Новый COMОбъект("Excel.Application");
	Excel.Visible=0;
	Excel.FileValidation = 1;
	Excel.Workbooks.Open(ИмяФайла, , Истина);
	Book 	= Excel.Workbooks(1);
	Sheet 	= Book.Sheets(1);
	МассивМассивовXLS = Sheet.UsedRange.Value.Выгрузить();
//ТАБ
	ТабДокумент= Новый ТабличныйДокумент;
	ТабДокумент.Прочитать(ИмяФайлаXLSX);
	ПостроительОтчета = Новый ПостроительОтчета; 
	ПостроительОтчета.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДокумент.Область());
	ПостроительОтчета.Выполнить();
	// Результат выгружаем в таблицу значений.
	ТабЗначений = ПостроительОтчета.Результат.Выгрузить();

Часть кода для сравнения этих методов:

	ИначеЕсли СтрНайти(Стр, ",") > 0 Тогда
		//СтрокаCOM[КиЗ.Ключ]	"0,00002"	Строка
		//СтрокаТАБ[КиЗ.Значение]	"0,000020"	Строка
		// ...
		ДобавитьНюанс(Нюансы, "Нюанс1", СтрокаCOM[КиЗ.Ключ], СтрокаТАБ[КиЗ.Значение]);

	ИначеЕсли ТолькоЦифрыВСтроке(Стр) Тогда
		//СтрокаCOM[КиЗ.Ключ]	"58198119"	Строка
		//СтрокаТАБ[КиЗ.Значение]	"058198119"	Строка
		// ...
		ДобавитьНюанс(Нюансы, "Нюанс2", СтрокаCOM[КиЗ.Ключ], СтрокаТАБ[КиЗ.Значение]);

	ИначеЕсли КиЗ.Значение = "Колонка4" И СтрНайти(Стр, ".") > 0 Тогда
		//СтрокаCOM[КиЗ.Ключ]	"835,2"	Строка
		//СтрокаТАБ[КиЗ.Значение]	"835.2000000000001"	Строка
		// ...
		ДобавитьНюанс(Нюансы, "Нюанс3", СтрокаCOM[КиЗ.Ключ], СтрокаТАБ[КиЗ.Значение]);

	ИначеЕсли СодержимоеПервых100СтрокПусто(ТабДокумент) Тогда 
		// если платформа не смогла прочитать и выдала пустые строки
		// ...
		ДобавитьНюанс(Нюансы, "Нюанс4", "Пустые строки: NativeXLSX", "", Истина);

	ИначеЕсли СокрЛП(СтрокаОбразец[КиЗ.Ключ]) = СокрЛП(Стр) Тогда
		//СтрокаCOM[КиЗ.Ключ]	"уп.10"	Строка
		//СтрокаТАБ[КиЗ.Значение]	"уп.10                    "	Строка
		// ...
		ДобавитьНюанс(Нюансы, "Нюанс5", СтрокаCOM[КиЗ.Ключ], СтрокаТАБ[КиЗ.Значение]);

	ИначеЕсли ТабДокумент.ШиринаТаблицы > 1024 Тогда
		ДобавитьНюанс(Нюансы, "Нюанс6", "ШиринаТаблицы > 1024", "");

// и т.д.

Я конечно буду рад ошибаться, но, по-моему, нативные средства платформы по работе с Excel совсем далекоооооо не всегда применимы на практике.

См. также

Загрузка номенклатуры из Excel в УТ11, КА 2, ERP 2, Розница 2. Дополнительные реквизиты и сведения, характеристики, картинки, цены, остатки

Загрузка и выгрузка в Excel Розничная торговля Логистика, склад и ТМЦ Ценообразование, анализ цен Прайсы Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Загрузка из файлов xls, xlsx, ods, csv, mxl в УТ11, КА 2, ERP 2, Розница 2. Задействованы все возможности конфигурации - заполнение реквизитов номенклатуры, дополнительных реквизитов и сведений, характеристики, доп.реквизиты и сведения характеристик. Дополнительные обработки для расширения возможностей.

10560 руб.

29.10.2014    211421    630    526    

446

Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2

Загрузка и выгрузка в Excel Логистика, склад и ТМЦ Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 09.04.2024, версия 9.9 - 9.10)

14400 руб.

20.11.2015    151557    367    376    

503

Маркетплейсный загрузчик для 12-ти маркетплейсов в 1С:БП 3, УТ 11, КА 2, ERP, УНФ

Загрузка и выгрузка в Excel Маркетплейсы Платформа 1С v8.3 Бухгалтерский учет 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Управленческий учет Платные (руб)

Реальный помощник, с помощью которого Вы сделаете необходимые документы для Wildberries, OZON, ЯндексМаркет, Мегамаркет, Aliexpress, "Детский мир", Казань-Экспресс, "Леруа Мерлен", ЭНФАНТА (Акушерство), ЛаМода, Летуаль, "Твой дом" в документы "Отчет комиссионера (агента) о продажах" и другие, может работать в "Бухгалтерия 3", "Бухгалтерия 3 КОРП", УТ 11, УНФ, КА 2, ERP. Возможность подключить любые маркетплейсы. Анализ продаж ОЗОН. 30 дней БЕСПЛАТНОГО пользования!

1800 руб.

12.08.2021    32419    243    64    

124

SALE! 30%

Распознавание и загрузка сканов в 1С "одним нажатием": УПД, ТОРГ-12, накладные, счета, номенклатура, заказы и т.д.

Загрузка и выгрузка в Excel Документооборот и делопроизводство (СЭД) Учет документов Распознавание документов и образов Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Универсальная программа для распознавания ЛЮБЫХ СКАНОВ ИЛИ ФОТО ТОВАРНЫХ ДОКУМЕНТОВ в 1С. Не требует указания параметров и предварительной настройки. Просто выбираете файл (PDF, JPG, DOC, XLS, HTML и т.д.) выбираете документ 1С и нажимаете кнопку "Распознать и загрузить".

6000 5520 руб.

04.06.2019    101947    298    173    

314

SALE! 20%

Загрузка документов и номенклатуры из Excel в 1С "одним нажатием": УПД, ТОРГ-12, отчеты маркетплейсов, заказы, счета, прайсы

Загрузка и выгрузка в Excel Оптовая торговля Платформа 1С v8.3 Управляемые формы Платформа 1C v8.2 Конфигурации 1cv8 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Универсальная обработка для загрузки документов из Excel в 1С. Не требует указания параметров (номера колонок, номер первой строки таблицы и т.д.) и предварительной настройки. Просто выбираете файл Excel, документ 1С и нажимаете кнопку "Загрузить". Обработка сама находит таблицу в файле Excel, необходимые для загрузки данные в ней (номенклатура, количество, НДС, цена, сумма) и загружает ее в 1С. Вместе с номенклатурой может найти контрагента, номер и дату документа, штрих-коды, серии ГТД, страну и т.д. Распознает документы ЛЮБОЙ ФОРМЫ (УПД, ТОРГ-12, заказ, отчет комиссионера и т.д.). Не требует MS Office. Для поиска таблиц используются методы эвристического поиска. Загружает только то, что нужно, т.е. пропускает повторы шапки таблицы, заголовки, промежуточные итоги, подписи и т.д. Содержит модуль работы с электронной почтой и api-загрузчик отчетов о продажах маркетплейсов.

5000 4000 руб.

09.11.2016    216177    935    886    

946

Загрузка данных отчета о реализации товаров из Excel файла СберМегаМаркет

Загрузка и выгрузка в Excel Маркетплейсы Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Загрузка данных отчета о реализации товаров из сервиса СберМегаМаркет для конфигурации: Бухгалтерия предприятия, редакция 3.0; Управление торговлей, редакция 11 и Управление нашей фирмой, редакция 3.0 в документ "Отчет комиссионера (агента) о продажах".

4800 руб.

07.06.2022    15429    82    0    

63
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Поручик 4674 21.06.19 22:33 Сейчас в теме
Вот это не работает. Запись в виде Excel в поток. А хотелось бы исключить лишние файловые операции.
		ТабДок = Новый ТабличныйДокумент;
		ОтчетОбъект.СкомпоноватьРезультат(ТабДок);
		
		Поток = Новый ПотокВПамяти;
		
		ТабДок.Записать(Поток, ТипФайлаТабличногоДокумента.XLSX);

Цель этой операции - тупо запихать сгенерированный отчет на FTP сервер в регламентном задании.
2. ltfriend 963 21.06.19 23:40 Сейчас в теме
(1) так об этом прямо сказано в синтаксис-помощнике. В поток только ods (или как там правильно, по памяти могу ошибиться) или mxl, поэтому от временных файлов полностью, увы, отказаться нельзя. Вот последний пример, по http запросу вернуть печ. форму документа в xlsx. Казалось бы, сохранил таю документ в поток в памяти, получил двоичные данные и передал клиенту. Но нет, приходиться прибегать к относительно медленным файловым операциям. Сохранить на диск в xlsx, потом считать с диска в память (двоичные данные) и только потом отдать клиенту.
rolin555; Поручик; +2 Ответить
3. wolfsoft 2421 24.06.19 08:36 Сейчас в теме
Да только тот факт, что табличный документ не читает многостраничные файлы, уже существенно снижает ценность чтения этим способом.
4. Shaldryn 05.08.20 12:47 Сейчас в теме
Спасибо за "СодержитЗначение", помогло в моей ситуации
5. METAL 289 17.11.21 15:46 Сейчас в теме
Извините, но правильно Нюанс
6. kuzyara 1914 01.12.23 07:48 Сейчас в теме
(5) спасибо, исправил
Оставьте свое сообщение