Как прочитать из Excel?

1. PhoenixAOD 62 22.12.15 06:58 Сейчас в теме
Доброго времени суток всем читающим! Есть таблица эксель, в таком формате
Как правильно прочитать данные так что бы 1 прочитать построчно а в 2 из цикла заполнить ТЗ которая уже имеет конкретные значения колонок. Дело в том, что с чтением из Экселя не работал до этого.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. CaptainMorgan 22.12.15 07:05 Сейчас в теме
(1) Примерно так:
Функция ПрочитатьФайл(ИмяФайла)
	
	НомерЛистаExcel = 1;
	xlLastCell      = 11;
	
	ВыбФайл = Новый Файл(ИмяФайла);
	Если НЕ ВыбФайл.Существует() Тогда
		Сообщить("Файл не существует!");
		Возврат Ложь;
	КонецЕсли;
	
	Попытка
		Excel = Новый COMОбъект("Excel.Application");
		Excel.WorkBooks.Open(ИмяФайла);
		ExcelЛист = Excel.Sheets(НомерЛистаExcel);
	Исключение
		Сообщить("Ошибка. Возможно неверно указан номер листа книги Excel.");
		Возврат ложь;		
	КонецПопытки; 	
	
	ТЗ = новый ТаблицаЗначений;	
	ТЗ.Колонки.Добавить("ИмяФайла");
	ТЗ.Колонки.Добавить("Сотрудник");
	ТЗ.Колонки.Добавить("ФизическоеЛицо");
	ТЗ.Колонки.Добавить("Организация");
	ТЗ.Колонки.Добавить("Период"); 		
	ТЗ.Колонки.Добавить("КалендарныхДней");				
	
	ActiveCell = Excel.ActiveCell.SpecialCells(xlLastCell);
	// количество активных строк:
	RowCount    = ActiveCell.Row;
	//количество активных колонок:
	ColumnCount = ActiveCell.Column; 		
	
	// "2" - номер строки, с которой начинаем считывать данные: 
	Для Row = 2 По RowCount Цикл 		
		НовСтрока = ТЗ.Добавить();
		НовСтрока.ИмяФайла = ИмяФайла;
		// позицию (цифру КОЛОНКИ) "Сотрудника" можно запросить у пользователя на форме обработки
		//это позиция для примера без запроса указать её у пользователя:
		НовСтрока.Сотрудник = ExcelЛист.Cells(Row, 2).Text;
		НовСтрока.ФизическоеЛицо = ExcelЛист.Cells(Row, 3).Text;
		НовСтрока.Организация = ExcelЛист.Cells(Row, 4).Text;
		НовСтрока.Период = ExcelЛист.Cells(Row, 5).Text;
		НовСтрока.КалендарныхДней = ExcelЛист.Cells(Row, 6).Text; 			
	КонецЦикла;
	
	Excel.WorkBooks.Close();
	Excel = 0;   		
	Возврат ТЗ;	 	 	
КонецФункции  

&НаКлиенте
Процедура ИмяФайлаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) 	
	СтандартнаяОбработка = Ложь; 	
	ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	ДиалогОткрытияФайла.ПолноеИмяФайла = Объект.ИмяФайла;
	ДиалогОткрытияФайла.Фильтр = "Документ Excel (*.xls, *.xlsx)|*.xls; *.xlsx";
	ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
	ДиалогОткрытияФайла.Заголовок = "Выберите файл";
	Если ДиалогОткрытияФайла.Выбрать() Тогда
		Объект.ИмяФайла = ДиалогОткрытияФайла.ПолноеИмяФайла;
	КонецЕсли;  	
КонецПроцедуры

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

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

&НаКлиенте
Процедура Загрузить(Команда)
	ЗагрузитьНаСервере();   	
КонецПроцедуры    
Показать
PhoenixAOD; +1 Ответить
3. PhoenixAOD 62 22.12.15 07:13 Сейчас в теме
(2) CaptainMorgan, с циклом все понятно, большое спасибо, а как правильно прочитать строки с 1 по 5 во колонке B ?
4. avto1c 22.12.15 08:33 Сейчас в теме
(3) PhoenixAOD,
Сообщить(ТекСтрока.Сотрудник);
эта строка в серверной процедуре смущает только меня?
5. PhoenixAOD 62 22.12.15 08:41 Сейчас в теме
(4) avto1c, если честно меня интерисовало только вот это дело
Для Row = 2 По RowCount Цикл         
        НовСтрока = ТЗ.Добавить();
        НовСтрока.ИмяФайла = ИмяФайла;
        // позицию (цифру КОЛОНКИ) "Сотрудника" можно запросить у пользователя на форме обработки
        //это позиция для примера без запроса указать её у пользователя:
        НовСтрока.Сотрудник = ExcelЛист.Cells(Row, 2).Text;
        НовСтрока.ФизическоеЛицо = ExcelЛист.Cells(Row, 3).Text;
        НовСтрока.Организация = ExcelЛист.Cells(Row, 4).Text;
        НовСтрока.Период = ExcelЛист.Cells(Row, 5).Text;
        НовСтрока.КалендарныхДней = ExcelЛист.Cells(Row, 6).Text;             
    КонецЦикла;
Показать

остальное даже не смотрел)))
7. dj_serega 393 22.12.15 10:08 Сейчас в теме
(4) avto1c,
эта строка в серверной процедуре смущает только меня?

Сообщение будет выведено когда выполнение вернется с сервера.
6. PhoenixAOD 62 22.12.15 08:41 Сейчас в теме
Все полностью разобрался что да как)) Всем спасибо кто откликнулся)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот