Top.Mail.Ru
График: 5/2, full-time
Формат: удаленный/офис
Вакансия «1С-программист»

Несколько способов работы с Excel в 1С

В этой статье расскажу о нескольких способах работы с таблицами Excel.

Для примера будем заполнять таблицу:

Используя заполненный файл Excel:

Работа с таблицами Excel через COMОбъект

Способ подойдет если установлен Excel. Может выполняться на клиенте и на сервере. Из плюсов – можно использовать методы Excel, из минусов – выполняется долго.

В этом варианте необходимо подключиться к приложению Excel, с помощью него открыть файл, определить лист. Далее по выбранному листу пробегаемся по всем строками (колонкам) и получаем значения ячеек. Обязательно закрываем и выходим из Excel.

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

Работа с таблицами Excel через Внешний источник данных

Необходимо добавить внешний источник данных в конфигурацию, и возможно установить драйвер Microsoft Excel Driver для работы с Excel.

Указываем параметры и устанавливаем соединение до нашего файла. Далее запросом к внешнему источнику получаем данные из таблицы Excel.

    Таблица.Очистить();

	ПараметрыПодключения = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;
	
	ПараметрыПодключения.СтрокаСоединения = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" + Путь + ";";

	ВнешниеИсточникиДанных.Excel.УстановитьОбщиеПараметрыСоединения(ПараметрыПодключения);
	ВнешниеИсточникиДанных.Excel.УстановитьСоединение();

	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ExcelТаблицаТаблица1.Код КАК Код,
		|	ExcelТаблицаТаблица1.Наименование КАК Наименование,
		|	ExcelТаблицаТаблица1.Количество КАК Количество,
		|	ExcelТаблицаТаблица1.Цена КАК Цена
		|ИЗ
		|	ВнешнийИсточникДанных.Excel.Таблица.Таблица1 КАК ExcelТаблицаТаблица1";
	
	РезультатЗапроса = Запрос.Выполнить();
	Выборка			 = РезультатЗапроса.Выбрать();
	
	Пока Выборка.Следующий() Цикл
		ЗаполнитьЗначенияСвойств(Таблица.Добавить(), Выборка);
	КонецЦикла;

Работа с таблицами Excel через Табличный документ

Создаем переменную ТабличныйДокумент, с помощью метода Прочитать() заполняем табличный документ данными из таблицы Excel. Далее, как с работой через COMОбъект, пробегаемся по всем строками (колонкам) и получаем значения ячеек. Работает быстро и сделано средствами 1С.

    Таблица.Очистить();

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

Работа с таблицами Excel через Табличный документ (альтернативный способ)

Иногда пользователям удобнее загрузить только некоторую часть таблицы, а не загружать файл целиком. Для этого на форме добавляем реквизит ТабличныйДокумент, ставим флажки для возможности редактирования и отображения сетки.

В процедуре ПриСозданииНаСервере() формы заполняем шапку табличного документа (также можно настроить шрифта и вывод рамок):

    ТабДок.Область("R1C1").Текст = "Код";
	ТабДок.Область("R1C2").Текст = "Наименование";
	ТабДок.Область("R1C3").Текст = "Количество";
	ТабДок.Область("R1C4").Текст = "Цена";

Пользователь в отрытом окне Excel выделяет нужные ячейки, копирует их, затем вставляет в табличный документ и нажимает кнопку «Загрузить».

При нажатии на кнопку «Загрузить» пробегаемся по всем строками (колонкам) и получаем значения ячеек. Как и в предыдущем варианте, отличие в заполнении табличного документа – в этом варианте его заполняет пользователь.

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

Надеюсь, что статья оказалась полезной и пригодится для реализации в задачах.

Comments

So empty here ... leave a comment!

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

Sidebar