Консультация Беларусь
Консультация Россия
Блог

Как прочитать Excel в 1С (4 способа)

В этой статье мы покажем 4 способа чтения файла Excel в 1С.
Фрагменты кода, которые будут приведены ниже вы сможете найти в файле внешней обработки:

Способ № 1. Табличный документ (чтение по ячейкам)

&НаСервере
Процедура ПрочитатьExcel_ТабличныйДокумент(ПутьКФайлу)

	ТаблицаТоваров.Очистить();
	
	ТабДок = Новый ТабличныйДокумент;
	Попытка
		ТабДок.Прочитать(ПутьКФайлу);
	Исключение
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = "Не удалось прочитать файл по причине: " + ОписаниеОшибки();
		Сообщение.Сообщить();                                                        
		Возврат;
	КонецПопытки;
	
	КоличествоСтрок = ТабДок.ВысотаТаблицы;
	КоличествоКолонок = ТабДок.ШиринаТаблицы;
	
	Для НомерСтроки = 1 По КоличествоСтрок Цикл
		
		Если НомерСтроки = 1 Тогда
			Продолжить;			
		КонецЕсли;
		
		СтрокаТаблицы = ТаблицаТоваров.Добавить();
		СтрокаТаблицы.Наименование	= ТабДок.Область(НомерСтроки, 1).Текст;
		СтрокаТаблицы.Артикул		= ТабДок.Область(НомерСтроки, 2).Текст;
		СтрокаТаблицы.Остаток		= ТабДок.Область(НомерСтроки, 3).Текст;
		СтрокаТаблицы.Цена			= ТабДок.Область(НомерСтроки, 4).Текст;
	
	КонецЦикла;
	
КонецПроцедуры

Способ № 2. Табличный документ + Построитель запроса

&НаСервере
Процедура ПрочитатьExcel_ПостроительЗапроса(ПутьКФайлу)

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

Способ № 3. Технология OLE (Excel.Application)

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

Способ № 4. Технология ADO (ADODB.Connection)

&НаСервере
Процедура ПрочитатьExcel_ADO(ПутьКФайлу)
	
	ТаблицаТоваров.Очистить();
	
	// 1. Установка соединения с источником данных
	Попытка
		СтрокаСоединения = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ПутьКФайлу +";
							|Extended Properties=""Excel 12.0;HDR=YES""";
		
		Соединение = Новый COMОбъект("ADODB.Connection");
		Соединение.Open(СтрокаСоединения);
	Исключение
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = "Не удалось установить соединение с источником данных по причине: " + ОписаниеОшибки();
		Сообщение.Сообщить();
		Возврат;
	КонецПопытки;
	
	// 2. Получение выборки данных из источника
	Попытка
		ТекстЗапроса = "SELECT * FROM [Лист1$]";
		Выборка = Новый COMОбъект("ADODB.RecordSet");
		Выборка.Open(ТекстЗапроса, Соединение);
	Исключение
	    Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = "Не удалось получить данные из источника по причине: " + ОписаниеОшибки();
		Сообщение.Сообщить(); 
		Возврат;
	КонецПопытки;	
	
	// 3. Обработка выборки данных
	Пока НЕ Выборка.EOF() Цикл
		
		СтрокаТаблицы = ТаблицаТоваров.Добавить();
		СтрокаТаблицы.Наименование	= Выборка.Fields(0).Value;
		СтрокаТаблицы.Артикул		= Выборка.Fields(1).Value;
		СтрокаТаблицы.Остаток		= Выборка.Fields(2).Value;
		СтрокаТаблицы.Цена			= Выборка.Fields(3).Value;
		
		Выборка.MoveNext();
		
	КонецЦикла;
	
	// 4. Закрыть соединение
	Выборка.Close();
	Соединение.Close();
	
КонецПроцедуры
Этот материал также доступен в видеоформате на нашем YouTube-канале:
Подписывайтесь на нас в соц. сетях:
YouTube: https://www.youtube.com/@ironskills-1c
Telegram: https://t.me/ironskills_community1c
VK: https://vk.com/ironskillsby
Instagram: https://www.instagram.com/ironskills_school/
Программирование