Загрузка из Excel

Работа с Excel из 1с

Написана обработка в которой приведены все стандартные способы загрузить данные из excel.

Скачать можно git и инфостарт.

Листинг кода загрузки данных из excel в 1с

В конфигурации приведено 5 методов загрузки информации из Excel в 1с, нет лишних оберток.

Отлично подходит как болванка, так и для обучению программированию.

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

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

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

	Попытка
		Эксель = Новый COMОбъект("Excel.Application");
		Эксель.DisplayAlerts = 0;
		Эксель.Visible = 0;
	Исключение
   		Return;
	КонецПопытки;

	// 
	// Работаем с данными Excel
	//
	
	Эксель.Workbooks.Close();
	Эксель.Application.Quit();
КонецПроцедуры

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

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

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

&НаСервере
Процедура ЗагрузкаСПомощьюВнешнегоИсточникаДанныхНаСервере()
	ПараметрыПодключения = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;
	
	ПараметрыПодключения.СтрокаСоединения =
	"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");
	             
	             
	
	ТаблицаЭксельВ1с = Запрос.Выполнить().Выгрузить();
	
	Для Каждого Стр Из ТаблицаЭксельВ1с Цикл
		Сообщить(Стр); // Обрабатываем
	КонецЦикла;	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ЗагрузкаНаКлиентеOLE(Команда)
	Попытка
		Эксель = Новый 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(НомерСтроки, НомерКолонки).Value;
				// ...
				Сообщить(ЗначениеВЯчейке); // Обрабатываем занчение
				// ...
			КонецЦикла;
		КонецЦикла;	
	КонецЦикла;
		
	Эксель.Workbooks.Close();
	Эксель.Application.Quit();
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ЗагрузкаВТабличныйДокумент(Команда)
	ЗагрузкаВТабличныйДокументНаСервере();
КонецПроцедуры

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

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

&НаКлиенте
Процедура ЗагрузкаВТабличныйДокументv2(Команда)
	ЗагрузкаВТабличныйДокументНаСервереv2();
КонецПроцедуры

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

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

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

Опубликовано

в

,

от

Комментарии

Добавить комментарий