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

18.08.22

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
5 способов загрузки из Excel в 1с:
.cf 270,98Kb
153
153 Скачать (1 SM) Купить за 1 850 руб.

Протестировано на платформе: 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 в 1С одним нажатием!

С помощью данной обработки вы сможете загружать любые товарные документы буквально в один клик! Для загрузки необходимо просто выбрать файлы Excel и нажать кнопку "Загрузить". Простейший интерфейс и мощный механизм поиска номенклатуры. Распознает документы любой формы (УПД, ТОРГ-12, заказ, отчет комиссионера и т.д.)


excel загрузка

См. также

SALE! 20%

Загрузка и выгрузка в 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С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

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

6000 5100 руб.

09.11.2016    231722    1050    896    

992

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

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

11100 руб.

29.10.2014    216116    651    526    

456

Загрузка и выгрузка в 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 дней БЕСПЛАТНОГО пользования!

2400 руб.

12.08.2021    35010    332    67    

150

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

Загрузка данных отчета о реализации и продаже товаров из сервиса Яндекс.Маркета «Беру» в 1С из Отчетов Excel для конфигурации: Бухгалтерия предприятия, редакция 3.0; Управление торговлей, редакция 11; Управление торговлей, редакция 10.3; Управление нашей фирмой, редакция 3.0 и Розница, редакция 3.0 в документ «Отчет комиссионера о продажах».

4800 руб.

09.12.2020    24882    245    1    

107

SALE! 30%

Загрузка и выгрузка в 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С и нажимаете кнопку "Распознать и загрузить".

8400 5880 руб.

04.06.2019    106029    307    173    

322

Загрузка и выгрузка в 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 1С:Розница 3.0 Платные (руб)

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

15600 руб.

20.11.2015    154925    376    377    

510
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ManyakRus 489 29.03.21 10:16 Сейчас в теме
надо было померить скорость работы заодно :) разных способов
user712426; 2C_prog; Hexed; Medvedkov-85; qwed557; +5 Ответить
2. elephant_x 145 29.03.21 10:18 Сейчас в теме
(1) Хорошая идея. Вечером пожалуй сделаю, дополню статью, и добавлю тестовый файл)
user712426; Hexed; Cmapnep; +3 Ответить
20. tugushev98 18.08.22 21:06 Сейчас в теме
21. elephant_x 145 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 145 18.09.22 00:01 Сейчас в теме
(4)
переварить
если вышлю вам обработку сможете потестить на таком большом файле и написать результаты?
23. LamerSoft 1330 18.10.22 19:34 Сейчас в теме
На мой взгляд скорость вторична, тут ведь не БигДата.
Первична стабильность, и метод загрузки который используется. Строка либо Значение, а про это ни слова !
Подскажите, платформа Excel-95 поддерживает ?

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

По поводу стабильности, у меня ни с одним методом кроме ком проблем не было, ком-коннектор иногда слетает, но поправить просто и быстро, главное заметить вовремя)
3. ManyakRus 489 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 4780 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 145 15.03.22 10:11 Сейчас в теме
(6) Никак не найду время дописать, что бы можно было замерить время)
9. AlexeyZol 22.03.22 13:44 Сейчас в теме
Спасибо. А есть опыт: какой способ можно использовать при написании расширений в облаке 1CFresh.com?
10. elephant_x 145 22.03.22 21:58 Сейчас в теме
(9) Давно что-то делал, но что использовал не помню. Для фреша в один раз всего обработку писал, но клиент модерации не дождался ушел на приватный сервер)
11. mikl79 119 06.07.22 10:19 Сейчас в теме
Добрый день.
После обновления Excel с 2013 на 2019 на сервере перестала работать загрузка в 1С из Excel,
ошибка происходила здесь:
ЭксельКнига = Эксель.Workbooks.Open(ИмяФайла);

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

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


Поэтому переписал загрузку через построитель, спасибо большое!
Может конечно есть решение - как восстановить обмен через OLE?
13. elephant_x 145 06.07.22 12:39 Сейчас в теме
(11) Попрошу админа создать виртуалку с 2019 офисом, посмотрю в чем проблема.
(12) Через внешний источник нужно устанавливать драйвер
m1_1976; user1869697; mikl79; +3 Ответить
14. mikl79 119 06.07.22 12:40 Сейчас в теме
16. mikl79 119 07.07.22 15:18 Сейчас в теме
(13), добрый день, не разобрались в проблеме?
17. elephant_x 145 08.07.22 09:43 Сейчас в теме
(16) Пока не успел, на выходных запланировал посмотреть.
19. mikl79 119 18.07.22 08:42 Сейчас в теме
(11), помогло вот это:
Администирование-СлужбыКопонентов-Компютеры-МойКомпютер-настройка DCOM-Microsoft Excel application- Свойства-Удостоверение: Текущий пользователь
12. mikl79 119 06.07.22 12:37 Сейчас в теме
Через внешний источник не удалось подключиться к Excel, что на 2013, что на 2019 Excel.
Пишет: "... возможно драйвер не позволяет получать параметры строки соединения"
Поэтому у меня работает только через ТабДок.
Вот и проголосовал )
15. elephant_x 145 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 145 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 145 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 145 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 145 16.07.23 10:04 Сейчас в теме
(37)
Как вариант через хранилище
39. NeSPEC 47 31.10.23 08:49 Сейчас в теме
Здорово.
Однозначно - "плюсик".
Спасибо.
40. elephant_x 145 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;
		КонецЦикла;
	КонецЕсли;
КонецПроцедуры



Показать
Date; user1586879; +2 Ответить
42. user2040906 20.05.24 13:46 Сейчас в теме
&НаКлиенте
Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
			
	//Стандартная обработка - особенно актуальна когда есть несколько форм выбора значений
	//и если нужна не основная форма, тогда устанавливается в ложь
	//Для строкого типа данных, по стандарту ничего не происходит, поэтому тоже ложь
	СтандартнаяОбработка = Ложь;
			
	Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
			
	//Чтобы нельзя было выбрать несколько файлов одновременно
	Диалог.МножественныйВыбор = Ложь;
	Диалог.Заголовок = "Выберите файл для загрузки";
			
	//Чтобы выбирались только файлы нужного расширения
	Диалог.Фильтр = "Табличный документ Excel 2003(*.xls)|*.xls|Табличный документ Excel(*.xlsx)|*.xlsx"; 
			
	//Если выбран файл, то сохраняем путь к нему
	Если Диалог.Выбрать() Тогда
		ПутьКФайлу = Диалог.ПолноеИмяФайла;
	КонецЕсли;
КонецПроцедуры
		
&НаСервере
Процедура ЗагрузитьНаСервере()
			
	//подключаемся к эксел
	Попытка
		Excel = Новый COMОбъект("Excel.Application");
		Excel.WorkBooks.Open(ПутьКФайлу);
	Исключение
		Сообщить("Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!");
		Сообщить(ОписаниеОшибки());
		Возврат;
	КонецПопытки;
			
	Попытка
		//Открываем необходимый лист
		Excel.Sheets(1).Select(); // лист 1, по умолчанию
	Исключение
		//Закрываем Excel
		Excel.ActiveWorkbook.Close();
		Excel = 0;
		Сообщить("Файл "+Строка(ПутьКФайлу)+" не соответствует необходимому формату! Первый лист не найден!");
		Возврат;
	КонецПопытки;
			
	НомерСтроки = 2;
	Создано = 0;
	Пока СокрЛП(Excel.Cells(НомерСтроки,1).Text)<>"" Цикл
		Код = Excel.Cells(НомерСтроки,1).Text;
		Спр = Справочники.ДляЗагрузки.НайтиПоКоду(Код);
		//Проверка на существование элемента с таким кодом                
		Если Не ЗначениеЗаполнено(Спр) Тогда
			НовыйСпр = Справочники.ДляЗагрузки.СоздатьЭлемент();
			НовыйСпр.Код = Код;
			НовыйСпр.Наименование = Excel.Cells(НомерСтроки,2).Text;
			НовыйСпр.единицаИзмерения = Excel.Cells(НомерСтроки, 3).Text; 
			НовыйСпр.типНоменклатуры = Excel.Cells(НомерСтроки, 4).Text;
			НовыйСпр.цена = Excel.Cells(НомерСтроки, 5).Text;
			НовыйСпр.изображение = Excel.Cells(НомерСтроки, 6).Text;
			Попытка
				НовыйСпр.Записать();
				Создано = Создано+1;
			Исключение
				Сообщить("Ошибка при записи элемента с кодом "+код);
			КонецПопытки;
		Иначе
			Сообщить("Элемент с кодом "+Код+" уже существует");
		КонецЕсли;
		НомерСтроки = НомерСтроки+1;
	КонецЦикла;
			
	Сообщить("Создано "+Создано+" эл.");
			
	//Закрываем Excel
	Excel.ActiveWorkBook.Close();
			
КонецПроцедуры
		
&НаКлиенте
Процедура Загрузить(Команда)
	Если Не ЗначениеЗаполнено(ПутьКФайлу) Тогда
		Сообщить("Файл не выбран");
	Иначе
		ЗагрузитьНаСервере();
		//Отобразим загруженные данные
		Элементы.Список.Обновить();
	КонецЕсли;
КонецПроцедуры
Показать
Оставьте свое сообщение