5 способов загрузки из Excel в 1С

18.08.22

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

Конфигурация, состоящая из внешнего источника данных и одной обработки. Обработка содержит 5 примеров, как можно загрузить данные в 1С из Excel.

Скачать файлы

Наименование Файл Версия Размер
5 способов загрузки из Excel в 1с:
.cf 270,98Kb
129
.cf 1.0.0.2 270,98Kb 129 Скачать

Протестировано на платформе: 8.3.18.1334, 8.3.20.1710

Написано в EDT: 2020.6.2.8

В конфигурации 1 обработка и 1 внешний источник данных, который нужен для реализации загрузки одного из вариантов. Добавлен общий макет для проверки скорости загрузки на вашем железе.

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

 

 

Работа с Excel через OLE на сервере

#Область OLEСервер

&НаКлиенте
Процедура ЗагрузкаНаСервереOLE(Команда)
	Объект.Таблица1.Очистить();
	
	ТекДатаВремя = ТекущаяДата();
	
	нФайл = Новый Файл(ИмяФайла);
	
	//Если НЕ нФайл.Существует() Тогда
	//	Возврат;
	//КонецЕсли;
	
	ДвоичДанные = Новый ДвоичныеДанные(ИмяФайла);
	
	ОбработкаОЛЕНаСервере(ДвоичДанные, нФайл.Расширение);
	
	ИтоговоеВремя = ТекущаяДата() - ТекДатаВремя;
	
	Сообщить(ИтоговоеВремя);
КонецПроцедуры

&НаСервере
Процедура ОбработкаОЛЕНаСервере(ДвоичДанные, Расширение)
	ФайлЭксельНаСервере = ПолучитьИмяВременногоФайла(Расширение);
	ДвоичДанные.Записать(ФайлЭксельНаСервере);

	Попытка
		Эксель = Новый COMОбъект("Excel.Application");
		Эксель.DisplayAlerts = 0;
		Эксель.Visible = 0;
	Исключение
   		Возврат;
	КонецПопытки;
	
	ЭксельКнига = Эксель.Workbooks.Open(ИмяФайла);	
	КоличествоСтраниц = ЭксельКнига.Sheets.Count;
	
	// Перебираем все листы
	Для НомерЛиста = 1 По КоличествоСтраниц Цикл 
		Лист = ЭксельКнига.Sheets(НомерЛиста);
		КоличествоСтрок = Лист.Cells(1, 1).SpecialCells(11).Row;
		КоличествоКолонок = Лист.Cells(1, 1).SpecialCells(11).Column;

		// Перебираем строки
		Для НомерСтроки = 1 По КоличествоСтрок Цикл 
			Нстр = Объект.Таблица1.Добавить();
			Нстр.КолонкаКод	= Лист.Cells(НомерСтроки, 1).Value;
			Нстр.Колонка2	= Лист.Cells(НомерСтроки, 2).Value;
			Нстр.Колонка3	= Лист.Cells(НомерСтроки, 3).Value;
			Нстр.Колонка4	= Лист.Cells(НомерСтроки, 4).Value;
			//// Перебираем колонки
			//Для НомерКолонки = 1 По КоличествоКолонок Цикл
			//	ЗначениеВЯчейке = Лист.Cells(НомерСтроки, НомерКолонки).Value;
			//	// ...
			//	Сообщить(ЗначениеВЯчейке); // Обрабатываем занчение
			//	// ...
			//КонецЦикла;
		КонецЦикла;	
	КонецЦикла;	 
	
	Эксель.Workbooks.Close();
	Эксель.Application.Quit();
КонецПроцедуры

#КонецОбласти

Работа с Excel используя внешний источник данных

#Область ВнешнийИсточникДанных

&НаКлиенте
Процедура ЗагрузкаСПомощьюВнешнегоИсточникаДанных(Команда)
	Объект.Таблица1.Очистить();
	
	ТекДатаВремя = ТекущаяДата();
	
	ЗагрузкаСПомощьюВнешнегоИсточникаДанныхНаСервере();
	
	ИтоговоеВремя = ТекущаяДата() - ТекДатаВремя;
	Сообщить(ИтоговоеВремя);
КонецПроцедуры

&НаСервере
Процедура ЗагрузкаСПомощьюВнешнегоИсточникаДанныхНаСервере()
	Объект.Таблица1.Очистить();
	ПараметрыПодключения = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;
	
	ПараметрыПодключения.СтрокаСоединения =
	"Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" + ИмяФайла + ";";
	
	ВнешниеИсточникиДанных.Excel.УстановитьОбщиеПараметрыСоединения(ПараметрыПодключения);
	ВнешниеИсточникиДанных.Excel.УстановитьСоединение();
	
	//Запрос = Новый Запрос("ВЫБРАТЬ
	//             |	ExcelТаблицаТаблица1.КолонкаКод,
	//             |	ExcelТаблицаТаблица1.Колонка2,
	//             |	ExcelТаблицаТаблица1.Колонка3 КАК Колонка3
	//             |ИЗ
	//             |	ВнешнийИсточникДанных.Excel.Таблица.Таблица1 КАК ExcelТаблицаТаблица1
	//             |ГДЕ
	//             |	ExcelТаблицаТаблица1.Колонка3 > 1
	//             |УПОРЯДОЧИТЬ ПО
	//             |	Колонка3");
	
		Запрос = Новый Запрос("ВЫБРАТЬ
	             |	ExcelТаблицаТаблица1.КолонкаКод,
	             |	ExcelТаблицаТаблица1.Колонка2,
	             |	ExcelТаблицаТаблица1.Колонка3 КАК Колонка3,
				 |	ExcelТаблицаТаблица1.Колонка4 КАК Колонка4
	             |ИЗ
	             |	ВнешнийИсточникДанных.Excel.Таблица.Таблица1 КАК ExcelТаблицаТаблица1");

	ТаблицаЭксельВ1с = Запрос.Выполнить().Выгрузить();
	Объект.Таблица1.Загрузить(ТаблицаЭксельВ1с);
	//Для Каждого Стр Из ТаблицаЭксельВ1с Цикл
	//	Сообщить(Стр); // Обрабатываем
	//КонецЦикла;	
КонецПроцедуры

Работа с Excel через OLE на клиенте

#Область OLEКлиент

&НаКлиенте
Процедура ЗагрузкаНаКлиентеOLE(Команда)
	Объект.Таблица1.Очистить();
	
	ТекДатаВремя = ТекущаяДата();
	
	Попытка
		Эксель = Новый COMОбъект("Excel.Application");
		Эксель.DisplayAlerts = 0;
		Эксель.Visible = 0;
	Исключение
   		Сообщить(ОписаниеОшибки()); 
   		Возврат;
	КонецПопытки;
				
	ЭксельКнига = Эксель.Workbooks.Open(ИмяФайла);	
	КоличествоСтраниц = ЭксельКнига.Sheets.Count;
	
	// Перебираем все листы
	Для НомерЛиста = 1 По КоличествоСтраниц Цикл 
		Лист = ЭксельКнига.Sheets(НомерЛиста);
		КоличествоСтрок = Лист.Cells(1, 1).SpecialCells(11).Row;
		КоличествоКолонок = Лист.Cells(1, 1).SpecialCells(11).Column;

		// Перебираем строки
		Для НомерСтроки = 1 По КоличествоСтрок Цикл 
			 Нстр = Объект.Таблица1.Добавить();
			Нстр.КолонкаКод	= Лист.Cells(НомерСтроки, 1).Value;
			Нстр.Колонка2	= Лист.Cells(НомерСтроки, 2).Value;
			Нстр.Колонка3	= Лист.Cells(НомерСтроки, 3).Value;
			Нстр.Колонка4	= Лист.Cells(НомерСтроки, 4).Value;
			// Перебираем колонки
			//Для НомерКолонки = 1 По КоличествоКолонок Цикл
			//	ЗначениеВЯчейке = Лист.Cells(НомерСтроки, НомерКолонки).Value;
			//	// ...
			//	Сообщить(ЗначениеВЯчейке); // Обрабатываем занчение
			//	// ...
			//КонецЦикла;
		КонецЦикла;	
	КонецЦикла;
		
	Эксель.Workbooks.Close();
	Эксель.Application.Quit();
	
	ИтоговоеВремя = ТекущаяДата() - ТекДатаВремя;
	Сообщить(ИтоговоеВремя);
КонецПроцедуры

#КонецОбласти

Загрузка в табличный документ

#Область ТабличныйДокумент

&НаСервере
Процедура ЗагрузкаВТабличныйДокументНаСервере()
	табДок = Новый ТабличныйДокумент;
	
	Попытка
		табДок.Прочитать(ИмяФайла);
	Исключение
		Возврат;
	КонецПопытки;
	
	нТабзнч = Новый ТаблицаЗначений;
	
	нТабзнч.Колонки.Добавить("КолонкаКод",	Новый ОписаниеТипов("Строка"));
	нТабзнч.Колонки.Добавить("Колонка2",	Новый ОписаниеТипов("Строка"));
	нТабзнч.Колонки.Добавить("Колонка3",	Новый ОписаниеТипов("Строка"));
	нТабзнч.Колонки.Добавить("Колонка4",	Новый ОписаниеТипов("Строка"));
	
	КоличествоСтрок = табДок.ВысотаТаблицы;
	
	Для сч = 2 По КоличествоСтрок Цикл 
		
		нСтр = нТабзнч.Добавить();		
		
		Попытка
			нСтр.КолонкаКод	= Строка(табДок.ПолучитьОбласть("R" + Формат(сч, "ЧГ=0;") + "C" + 1).ТекущаяОбласть.Текст);
			нСтр.Колонка2	= Строка(табДок.ПолучитьОбласть("R" + Формат(сч, "ЧГ=0") + "C" + 2).ТекущаяОбласть.Текст);
			нСтр.Колонка3	= Строка(табДок.ПолучитьОбласть("R" + Формат(сч, "ЧГ=0") + "C" + 3).ТекущаяОбласть.Текст);
			нСтр.Колонка4	= Строка(табДок.ПолучитьОбласть("R" + Формат(сч, "ЧГ=0") + "C" + 4).ТекущаяОбласть.Текст);
		Исключение
			Сообщение		= Новый СообщениеПользователю;
			Сообщение.Текст	= "Не удалось загрузить строку " + Строка(сч);
			Сообщение.Сообщить();
		КонецПопытки;
		
	КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура ЗагрузкаВТабличныйДокумент(Команда)
	Объект.Таблица1.Очистить();
	
	ТекДатаВремя = ТекущаяДата();
	
	ЗагрузкаВТабличныйДокументНаСервере();
	
	ИтоговоеВремя = ТекущаяДата() - ТекДатаВремя;
	Сообщить(ИтоговоеВремя);
КонецПроцедуры

#КонецОбласти

Работа с Excel через построитель

#Область ТабличныйДокументv2Построитель

&НаКлиенте
Процедура ЗагрузкаВТабличныйДокументv2(Команда)
	Объект.Таблица1.Очистить();
	
	ТекДатаВремя = ТекущаяДата();
	
	ЗагрузкаВТабличныйДокументНаСервереv2();
	
	ИтоговоеВремя = ТекущаяДата() - ТекДатаВремя;
	Сообщить(ИтоговоеВремя);
КонецПроцедуры

&НаСервере
Процедура ЗагрузкаВТабличныйДокументНаСервереv2()
	ТабДок = Новый ТабличныйДокумент;
	ТабДок.Прочитать(ИмяФайла);
	
	ОбластиТаб = ТабДок.Область(1, 1, ТабДок.ВысотаТаблицы, ТабДок.ШиринаТаблицы);
	
	Построитель = Новый ПостроительЗапроса;
	Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластиТаб);  
	Построитель.Выполнить();
	
	ТабДанные = Построитель.Результат.Выгрузить();	
	Объект.Таблица1.Загрузить(ТабДанные);
	
	//Для Каждого Стр Из ТабДанные Цикл 
	//	Сообщить(стр); // Обрабатываем	
	//КонецЦикла;

КонецПроцедуры

#КонецОбласти

 

excel загрузка

См. также

SALE! 10%

Загрузка номенклатуры из 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 9504 руб.

29.10.2014    210187    620    524    

439

Загрузка номенклатуры 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 форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 11.12.2023, версия 9.5 - 9.9)

13200 руб.

20.11.2015    150729    367    375    

501

Маркетплейсный загрузчик для 12-ти маркетплейсов в "БП 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    31897    226    63    

117

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    214932    925    886    

939

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

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

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

4800 руб.

07.06.2022    15080    79    0    

60

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    101387    296    173    

312
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. ManyakRus 483 29.03.21 10:16 Сейчас в теме
надо было померить скорость работы заодно :) разных способов
user712426; 2C_prog; Hexed; Medvedkov-85; qwed557; +5 Ответить
2. elephant_x 133 29.03.21 10:18 Сейчас в теме
(1) Хорошая идея. Вечером пожалуй сделаю, дополню статью, и добавлю тестовый файл)
user712426; Hexed; Cmapnep; +3 Ответить
20. tugushev98 18.08.22 21:06 Сейчас в теме
21. elephant_x 133 18.08.22 23:00 Сейчас в теме
(20) Обновил публикацию, добавил в конфигурацию файл excel на 8000+ строк в общий макет. У меня все загружается за 0 секунд, искать сервер послабее сейчас нет возможности. Если конфигурацию не качал, просто скопируй код из текста и создай файл с 4 колонками.
tugushev98; +1 Ответить
4. qwed557 30 14.04.21 23:39 Сейчас в теме
(1) плюсую , думаю еще надо не только скорость мерить, но и тестировать на больших файлах (больше Гб), возможно какой то из методов не сможет переварить такой файл, плюс посмотреть на загрузку системы в момент обработки. Если какой то из методов скажем так будет ложить сервер, неудобно перед пользователями получиться.
Hexed; ybatiaev; +2 Ответить
22. elephant_x 133 18.09.22 00:01 Сейчас в теме
(4)
переварить
если вышлю вам обработку сможете потестить на таком большом файле и написать результаты?
23. LamerSoft 1141 18.10.22 19:34 Сейчас в теме
На мой взгляд скорость вторична, тут ведь не БигДата.
Первична стабильность, и метод загрузки который используется. Строка либо Значение, а про это ни слова !
Подскажите, платформа Excel-95 поддерживает ?

P.S. По моей практике платформа давится и выплевывает всё что ниже 97, как-то так (
P.P.S Для танкистов уточняю, я про встроенный механизм пищеварения речь веду, если что )
user1869697; +1 Ответить
24. elephant_x 133 18.10.22 20:39 Сейчас в теме
(23) Excel-95 я лет 20 не видел, как с ним платформа себя ведет не подскажу.

По поводу стабильности, у меня ни с одним методом кроме ком проблем не было, ком-коннектор иногда слетает, но поправить просто и быстро, главное заметить вовремя)
3. ManyakRus 483 30.03.21 09:41 Сейчас в теме
И ещё хорошо бы "выбрать" самый лучший способ из всех(голосовалку :-). Я использую "Загрузка в табличный документ" т.к. тогда не надо устанавливать Excel, в том числе на сервере.
kai068; user1869697; Ryo3000; elephant_x; Hexed; 24rus; it_molotok; Ali1976; itoptimum; Jimbo; +10 Ответить
7. Hexed 2 14.03.22 12:55 Сейчас в теме
(3) То что в статье называется "Загрузка в табличный документ" подразумевает перебор полей, а это быть ресурсоемкая процедура. Последний вариант с загрузкой в табличный документ через построитель думаю будет правильней использовать.
G_109024220817455627449; tema018; user1869697; elephant_x; +4 Ответить
5. Yashazz 4709 20.02.22 17:19 Сейчас в теме
Я, в общем, тоже пользовался ADO, но "со стороны экселя": https://infostart.ru/public/312528/
user1869697; Hexed; +2 Ответить
6. Hexed 2 14.03.22 12:53 Сейчас в теме
Спасибо за статью. Годнота.
Голосую за работу с Excel через построитель из за не критичности к установке клиента и запрос без перебора полей табличного докумнета.
user1869697; elephant_x; +2 Ответить
8. elephant_x 133 15.03.22 10:11 Сейчас в теме
(6) Никак не найду время дописать, что бы можно было замерить время)
9. AlexeyZol 22.03.22 13:44 Сейчас в теме
Спасибо. А есть опыт: какой способ можно использовать при написании расширений в облаке 1CFresh.com?
10. elephant_x 133 22.03.22 21:58 Сейчас в теме
(9) Давно что-то делал, но что использовал не помню. Для фреша в один раз всего обработку писал, но клиент модерации не дождался ушел на приватный сервер)
11. mikl79 118 06.07.22 10:19 Сейчас в теме
Добрый день.
После обновления Excel с 2013 на 2019 на сервере перестала работать загрузка в 1С из Excel,
ошибка происходила здесь:
ЭксельКнига = Эксель.Workbooks.Open(ИмяФайла);

вообще когда подключаешься к Excel, т.е. в этот момент
Эксель = Новый COMОбъект("Excel.Application");

то он 1С не видит параметры ком-объекта


Поэтому переписал загрузку через построитель, спасибо большое!
Может конечно есть решение - как восстановить обмен через OLE?
13. elephant_x 133 06.07.22 12:39 Сейчас в теме
(11) Попрошу админа создать виртуалку с 2019 офисом, посмотрю в чем проблема.
(12) Через внешний источник нужно устанавливать драйвер
m1_1976; user1869697; mikl79; +3 Ответить
14. mikl79 118 06.07.22 12:40 Сейчас в теме
16. mikl79 118 07.07.22 15:18 Сейчас в теме
(13), добрый день, не разобрались в проблеме?
17. elephant_x 133 08.07.22 09:43 Сейчас в теме
(16) Пока не успел, на выходных запланировал посмотреть.
19. mikl79 118 18.07.22 08:42 Сейчас в теме
(11), помогло вот это:
Администирование-СлужбыКопонентов-Компютеры-МойКомпютер-настройка DCOM-Microsoft Excel application- Свойства-Удостоверение: Текущий пользователь
12. mikl79 118 06.07.22 12:37 Сейчас в теме
Через внешний источник не удалось подключиться к Excel, что на 2013, что на 2019 Excel.
Пишет: "... возможно драйвер не позволяет получать параметры строки соединения"
Поэтому у меня работает только через ТабДок.
Вот и проголосовал )
15. elephant_x 133 06.07.22 12:47 Сейчас в теме
(14)
Возможно excel не прописан в системе как источник данных, https://its.1c.ru/db/v838doc#bookmark:dev:TI000000848 вот тут можно прочитать как добавить

Для получения строки подключения к другим источникам данных (Excel, Access, другие СУБД) можно воспользоваться сайтом https://www.connectionstrings.com (на английском языке).

Вот тут можно посмотреть: http://msdn.microsoft.com/en-us/library/windows/desktop/ms715364(v=vs.85).aspx
18. jollyk 13.07.22 18:09 Сейчас в теме
При загрузке с помощью построителя имя колонки в табличной части должно совпадать с значением в первой строке учуда. Либо вы заполняете их вручную либо перед выгрузкой добавляете колонки. Примерно так.
&НаСервере
Процедура ДобавитьКолонки(ТабДанные) 
	
	Для Каждого Столбец Из ТабДанные.Колонки Цикл		
		нРеквизиты = Новый Массив;
		нРеквизиты.Добавить(Новый РеквизитФормы(Столбец.Имя, Новый ОписаниеТипов("Строка"), "Объект.тчЗагрузка", Столбец.Имя, Истина));
		ИзменитьРеквизиты(нРеквизиты);		
		нЭлемент = Элементы.Добавить(Столбец.Имя, Тип("ПолеФормы"), Элементы.тчЗагрузка); 
		нЭлемент.Вид = ВидПоляФормы.ПолеВвода; 
		нЭлемент.ПутьКДанным = "Объект.тчЗагрузка." + Столбец.Имя;		
	КонецЦикла	 
КонецПроцедуры
Показать
user1869697; elephant_x; +2 Ответить
25. user1315490 18.11.22 16:51 Сейчас в теме
Огромное спасибо, добрый человек! Наконец нашла решение - загрузка в справочник из Excel без COM объекта! Все получилось через загрузку в табличный документ
user1869697; elephant_x; +2 Ответить
26. elephant_x 133 18.11.22 16:58 Сейчас в теме
(25) Было время, когда ком объект был радостью
34. zloybot 05.04.23 09:42 Сейчас в теме
(26) Добрый день.
Если в книге несколько листов, выгружать только через ком объект?
Через построитель и табдок ТабДок.ВысотуСтраницы определяет учитывая все листы в книге(
27. user1315490 03.12.22 15:19 Сейчас в теме
Только теперь опять загвоздка: в книге Excel'я несколько листов, и нужны данные определенного листа (допустим, не первого).
Через загрузку в табличный документ придется конкретные номера строк указывать?.... (Для сч = 2 По КоличествоСтрок Цикл)
28. a.gorbachev 09.03.23 15:41 Сейчас в теме
А как же способ по разархивации файла Excel как ZIP файла.
Там внутри лежит XML с данными, которые легко парсятся.
И картинки в отдельной папочке лежат.
В эпоху перехода всего и вся на Linux - самое то.
Единственное ограничение - это чтение старых форматов.
29. elephant_x 133 09.03.23 16:01 Сейчас в теме
(28) я такое делал только что бы снять защиту с листа) а так способы 4 и 5 на линуксе прекрасно работают.

С XML разархивированной есть проблемы, там формат немного меняется от версии excel.

Если будет время из интереса попробую реализовать, что бы сравнить скорость загрузки.
30. a.gorbachev 09.03.23 16:12 Сейчас в теме
(29) Работают нормально, пока не встретишь более внушительный по размеру файл. Особенно с картинками. ТабличныйДокумент в этом плане начинает очень сильно кушать ресурсы. А так да, обычно всегда через ТабДок читал такие файлы. По поводу структуры XML - то изменения минимальны, используется Office Open XML, и чтение данных из строк и столбцов будет всегда аналогичным. Тем более в 1С есть очень интересный инструмент запросов XPath, позволяющий находить необходимые узлы XML файла, и не важно где они будут помещены в файле.
31. user1909675 27.03.23 19:36 Сейчас в теме
&НаСервере
Процедура СохранитьДанныеНаСервере()

	
	НомерЛистаExcel = 1;
	
	Попытка
		
		Excel = Новый COMОбъект("Excel.Application");
		Excel.WorkBooks.Open(ПутьКФайлу, 1);
		ExcelЛист = Excel.Sheets(НомерЛистаExcel);
		
	Исключение
		Сообщить("Уверен, что тебе это надо");
	КонецПопытки;       
	
	ActiveCell = Excel.ActiveCell.SpecialCells(11);
	                                  
	СтоблКол = ActiveCell.Row;
	
	Для	Row = 2 По СтоблКол Цикл
		
		Фамилия = Excel.Cells(Row, 1);
		ФамилияИзСправочника = Справочники.Сотрудники.НайтиПоНаименованию(Фамилия);
		Если ПустаяСтрока(ФамилияИзСправочника) Тогда 
			Сообщить("Такого сотрудника нет");
		Иначе
		НовСтрока = Справочники.Сотрудники.СоздатьЭлемент();
		
		Фамилия = СокрЛП(ExcelЛист.Cells(Row, 1).text);
		НовСтрока.Наименование = Фамилия;
		
		НовСтрока.Записать(); 
		КонецЕсли;
	КонецЦикла;
											 
	Excel.WorkBooks.Close();										 
	
	
КонецПроцедуры

&НаКлиенте
Процедура СохранитьДанные(Команда)
	СохранитьДанныеНаСервере();   
	
	ОбновитьИнтерфейс();
КонецПроцедуры

&НаКлиенте
Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) 
	
	СтандартнаяОбработка = Ложь;
	Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
        Диалог.Фильтр = "Документ Excel (*.xls, *.xlsx) | *.xls; *.xlsx";
	Диалог.МножественныйВыбор = Ложь;
	Если Диалог.Выбрать() Тогда
		ПутьКФайлу = Диалог.ПолноеИмяФайла;
	КонецЕсли;
	
КонецПроцедуры
Показать
33. elephant_x 133 29.03.23 14:11 Сейчас в теме
(31) Это какое-то дополнение? Что хотите сказать этим кодом?
32. пользователь 29.03.23 14:08
Сообщение было скрыто модератором.
...
35. user1937856 18.04.23 07:08 Сейчас в теме
&НаКлиенте
	Процедура ЗагрузкаСотрудника(Команда)
		Описание = Новый ОписаниеОповещения("ОбработатьФайл", ЭтотОбъект)
		НачатьПомещениеФайла(Описание)
КонецПроцедуры

&НаКлиенте
	Процедура ОбработатьФайл(Результат, Адрес, ВыбранноеИмяФайла, ДопПараметры) Экспорт
		Если Не ПустаяСтрока(ВыбранноеИмяФайла) Тогда
			ОбработкаФайла(ВыбранноеИмяФайла);
		КонецЕсли;
КонецПроцедуры

&НаСервере
	Процедура ОбработкаФайла(ВыбранноеИмяФайла)
		ТабДок = Новый Табличный Документ;
		ТабДок.Прочитать(ВыбранноеИмяФайла,
	СпособЧтенияЗначенийТабличногоДокумента.Значение);
		РабТаб = Новый ТаблицаЗначений;
	ПостроительЗапроса = Новый ПостроительЗапроса;
	Попытка
			НашаОбласть = ТабДок.Область("Сотрудники");
		Исключение
			Сообщить("Область Сотрудники в таблице нет!");
		Возврат;
	КонецПопытки;
	ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточниккаДанных(НашаОбласть);
	ПостроительЗапроса.Выполнить();
	РабТаб = ПостроительЗапроса.Результат.Выгрузить();
	Для Каждого СтрокаТЗ Из РабТаб Цикл
			НовыйСотрудник = Справочники.Сотрудники.НайтиПоРеквизиту("ФИО",СтрокаТЗ.ФИО);
		Если НовыйСотрудник.Пустая() Тогда
			НовыйСотрудник = Справочники.Сотрудники.СоздатьЭлемент();
			НовыйСотрудник.ФИО = СтрокаТЗ.ФИО;
		Иначе
			НовыйСотрудник = НовыйСотрудник.ПолучитьОбъект();
		КонецЕсли;
		НовыйСотрудник.Организация = СтрокаТЗ.Организация;
		НовыйСотрудник.Должность = СтрокаТЗ.Должность;
		НовыйСотрудник.Имя = СтрокаТЗ.Имя;
		НовыйСотрудник.ДатаРождения = СтрокаТЗ.ДатаРождения;
		НовыйСотрудник.Записать();
	КонецЦикла;
КонецПроцедуры
Показать
36. VKuser404712288 06.06.23 19:20 Сейчас в теме
&НаСервере
Процедура ЗагрузкаВТабличныйДокументНаСервере()
	табДок = Новый ТабличныйДокумент;
	
	Попытка
		табДок.Прочитать(ИмяФайла);
	Исключение
		Возврат;
	КонецПопытки;
Показать

Вот тут не понял, ИмяФайла - это что? Путь к файлу? В синтакс помощнике написано что метод прочитать принимает
•Поток Поток | ПотокВПамяти | ФайловыйПоток(Обязательный) Поток для чтения табличного документа.
37. VKuser404712288 06.06.23 19:25 Сейчас в теме
А если допустим сервер у меня находится не на моем ПК, тогда как файл передавать на сервер?
38. elephant_x 133 16.07.23 10:04 Сейчас в теме
(37)
Как вариант через хранилище
39. NeSPEC 41 31.10.23 08:49 Сейчас в теме
Здорово.
Однозначно - "плюсик".
Спасибо.
40. elephant_x 133 01.11.23 10:47 Сейчас в теме
(39) Спасибо, рад что пригодилось!
41. YourAlinochka 27.02.24 23:54 Сейчас в теме
А вот мой код для импорта из экселя, с диалогом выбора файла, тут есть проверка на дублируемые данные и дозапись


&НаКлиенте
Процедура Загрузить(Команда)
	Загрузка = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	Загрузка.ПолноеИмяФайла = "";
	Загрузка.Фильтр = ("Файлы xlsx | *.xlsx");
	Загрузка.МножественныйВыбор = ложь;
	Загрузка.Заголовок = "Выберите файлик";
	Оп = Новый ОписаниеОповещения("ЗавершениеВыбораФайла", ЭтаФорма);  
	Загрузка.Показать(Оп);
КонецПроцедуры           

&НаКлиенте
Процедура ЗавершениеВыбораФайла(ВыбранныеФайлы, ДополнительныеПараметры)Экспорт
	Если ВыбранныеФайлы <> Неопределено Тогда
		Если ВыбранныеФайлы.Количество()>0 Тогда
			ИмяФайла = ВыбранныеФайлы[0];
			Ог = Новый ОписаниеОповещения("ЗавершениеЗагрузкиФайла", ЭтаФорма);
			НачатьПомещениеФайлаНаСервер(Ог,,,,ИмяФайла, УникальныйИдентификатор);
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры 

&НаКлиенте
Процедура ЗавершениеЗагрузкиФайла(ОписаниеПомещенногоФайла, ДополнительныеПараметры)Экспорт
	Если ОписаниеПомещенногоФайла <> Неопределено Тогда
		ИмпортВСон(ОписаниеПомещенногоФайла.Адрес);		
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ИмпортВСон(АдресФайла)
	Если ЭтоАдресВременногоХранилища(АдресФайла) Тогда
		ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайла);
		ИмяВремФайла = ПолучитьИмяВременногоФайла("xlsx");
		ДвоичныеДанные.Записать(ИмяВремФайла);
		табДок = Новый ТабличныйДокумент;
		
		Попытка
			табДок.Прочитать(ИмяВремФайла);
		Исключение
			Возврат;
		КонецПопытки;
		фЧитаем = Истина;
		СЧ = 2;
		Пока фЧитаем Цикл 		
			
			Попытка
				сК	= Строка(табДок.ПолучитьОбласть("R"+Строка(СЧ)+"C1:R"+Строка(СЧ)+"C1").ТекущаяОбласть.Текст);
				сО	= Строка(табДок.ПолучитьОбласть("R"+Строка(СЧ)+"C2:R"+Строка(СЧ)+"C2").ТекущаяОбласть.Текст);
				сП	= Строка(табДок.ПолучитьОбласть("R" + СЧ + "C3:R" + СЧ + "C3").ТекущаяОбласть.Текст);
				сЦ	= Строка(табДок.ПолучитьОбласть("R" + СЧ + "C4:R" + СЧ + "C4").ТекущаяОбласть.Текст);
				сР	= Строка(табДок.ПолучитьОбласть("R" + СЧ + "C5:R" + СЧ + "C5").ТекущаяОбласть.Текст);
				сС = Строка(табДок.ПолучитьОбласть("R" + СЧ + "C6:R" + СЧ + "C6").ТекущаяОбласть.Текст);
				сТе	= Строка(табДок.ПолучитьОбласть("R" + СЧ + "C7:R" + СЧ + "C7").ТекущаяОбласть.Текст);
				Если ПустаяСтрока(сК + сО + сП + сЦ + сР + сС + сТ) Тогда
					фЧитаем = Ложь;
				Иначе
					об = Справочники.Материалы.НайтиПоНаименованию(сОборудование, Истина);
					Если об = Справочники.Материалы.ПустаяСсылка() Тогда
						
						нс = Справочники.Материалы.СоздатьЭлемент(); 
						нс.Наименование = сОборудование;	
					Иначе
						нс = об.ПолучитьОбъект();
					КонецЕсли;
					
					
					нс.Производитель = сПроизводитель;
					нс.Стоимость = сЦена;
					нс.Разрешение = сРазрешение;
					нс.СветовойПоток = сСветовойПоток;
					нс.ТипОборудования = ?(сКатегории = "Проекторы", Перечисления.ТипОборудования.Проектор, Перечисления.ТипОборудования.ИнтерактивнаяДоска);
					нс.Записать();
				КонецЕсли;
			Исключение
				Сообщение		= Новый СообщениеПользователю;
				Сообщение.Текст	= "Не удалось загрузить строку " + Строка(сч) + ОписаниеОшибки();
				Сообщение.Сообщить();
			КонецПопытки;
			СЧ = СЧ + 1;
		КонецЦикла;
	КонецЕсли;
КонецПроцедуры



Показать
Оставьте свое сообщение