Неплохое решение относительно чтения из эксель отчика всей области данных
#Область ЧтениеЕксель
&НаКлиенте
Функция ПрочитатьТабличныйДокументИзExcel(СтруктураПараметров)
xlLastCell = 11;
НомерЛистаExcel = НомерЛиста;
ВыбФайл = Новый Файл(ИмяФайла);
Если НЕ ВыбФайл.Существует() Тогда
Сообщить("Файл не существует!");
Возврат Ложь;
КонецЕсли;
Попытка
Excel = Новый COMОбъект("Excel.Application");
Excel.WorkBooks.Open(ИмяФайла);
ExcelЛист = Excel.Sheets(НомерЛистаExcel);
Исключение
Сообщить("Ошибка. Возможно неверно указан номер листа книги Excel.");
Возврат ложь;
КонецПопытки;
ActiveCell = Excel.ActiveCell.SpecialCells(xlLastCell);
ВсегоСтрок = ActiveCell.Row;
ВсегоКолонок = ActiveCell.Column;
Если НачальнаяСтрока > ВсегоСтрок Тогда Возврат Ложь КонецЕсли;
Область = ExcelЛист.Range(ExcelЛист.Cells(НачальнаяСтрока, 1), ExcelЛист.Cells(ВсегоСтрок, ВсегоКолонок));
МассивДанныхКолонок = Область.Value.Выгрузить();
Колонки = Новый Соответствие();
Колонки.Вставить(НомерКолонкиНомерКарты, "НомерКарты");
Колонки.Вставить(НомерКолонкиФИО, "ФИО");
Колонки.Вставить(НомерКолонкиАдрес, "Адрес");
Колонки.Вставить(НомерКолонкиТелефон, "Телефон");
Колонки.Вставить(НомерКолонкиДатаВыдачи, "ДатаВыдачи");
Колонки.Вставить(НомерКолонкиГдеВыдан, "ГдеВыдан");
Колонки.Вставить(НомерКолонкиТипКарты, "ТипКарты");
Колонки.Вставить(НомерКолонкиДатаРождения, "ДатаРождения");
Колонки.Вставить(НомерКолонкиПол, "Пол");
Колонки.Вставить(НомерКолонкиМейл, "ЕМайл");
СтруктураПараметров.Вставить("Колонки", Колонки);
Попытка
ЗаполнитьТабличныйДокументИзМассива(СтруктураПараметров, МассивДанныхКолонок, ВсегоСтрок-НачальнаяСтрока +1, ВсегоКолонок);
Исключение
Сообщить("Ошибка в блоке <ЗаполнитьТабличныйДокументИзМассива>: " + ОписаниеОшибки());
КонецПопытки;
//Когда после отчитки эксель предлагает визуальное сохранение
Excel.WorkBooks.Application.DisplayAlerts = False; //отключаем вывод пользовательских действий над эксель
Excel.WorkBooks.Close();
Excel.Quit();
Excel = 0;
Возврат Истина;
КонецФункции // ()
&НаСервереБезКонтекста
Процедура ЗаполнитьТабличныйДокументИзМассива(СтруктураПараметров, МассивДанныхКолонок, ВсегоСтрок, ВсегоКолонок)
Колонки = СтруктураПараметров.Колонки;
ТЗ = Новый ТаблицаЗначений;
Для Счетчик = 1 По ВсегоКолонок Цикл
ИмяКолонки = Колонки.Получить(Счетчик);
Если ИмяКолонки = Неопределено Тогда
ТЗ.Колонки.Добавить("Колонка"+Счетчик, Новый ОписаниеТипов("Строка"));
Продолжить;
КонецЕсли;
ТЗ.Колонки.Добавить(ИмяКолонки, Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(100)));
КонецЦикла;
Для Счетчик = 1 По ВсегоСтрок Цикл НоваяСтрока = ТЗ.Добавить() КонецЦикла;
Для Счетчик = 0 По ВсегоКолонок-1 Цикл ТЗ.ЗагрузитьКолонку(МассивДанныхКолонок[Счетчик], Счетчик) КонецЦикла;
СтруктураПараметров.Вставить("АдресВХранилище", ПоместитьВоВременноеХранилище(ТЗ, Новый УникальныйИдентификатор()));
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Функция ПрочитатьТабличныйДокументИзExcel(СтруктураПараметров)
xlLastCell = 11;
НомерЛистаExcel = НомерЛиста;
ВыбФайл = Новый Файл(ИмяФайла);
Если НЕ ВыбФайл.Существует() Тогда
Сообщить("Файл не существует!");
Возврат Ложь;
КонецЕсли;
Попытка
Excel = Новый COMОбъект("Excel.Application");
Excel.WorkBooks.Open(ИмяФайла);
ExcelЛист = Excel.Sheets(НомерЛистаExcel);
Исключение
Сообщить("Ошибка. Возможно неверно указан номер листа книги Excel.");
Возврат ложь;
КонецПопытки;
ActiveCell = Excel.ActiveCell.SpecialCells(xlLastCell);
ВсегоСтрок = ActiveCell.Row;
ВсегоКолонок = ActiveCell.Column;
Если НачальнаяСтрока > ВсегоСтрок Тогда Возврат Ложь КонецЕсли;
Область = ExcelЛист.Range(ExcelЛист.Cells(НачальнаяСтрока, 1), ExcelЛист.Cells(ВсегоСтрок, ВсегоКолонок));
МассивДанныхКолонок = Область.Value.Выгрузить();
Колонки = Новый Соответствие();
Колонки.Вставить(НомерКолонкиНомерКарты, "НомерКарты");
Колонки.Вставить(НомерКолонкиФИО, "ФИО");
Колонки.Вставить(НомерКолонкиАдрес, "Адрес");
Колонки.Вставить(НомерКолонкиТелефон, "Телефон");
Колонки.Вставить(НомерКолонкиДатаВыдачи, "ДатаВыдачи");
Колонки.Вставить(НомерКолонкиГдеВыдан, "ГдеВыдан");
Колонки.Вставить(НомерКолонкиТипКарты, "ТипКарты");
Колонки.Вставить(НомерКолонкиДатаРождения, "ДатаРождения");
Колонки.Вставить(НомерКолонкиПол, "Пол");
Колонки.Вставить(НомерКолонкиМейл, "ЕМайл");
СтруктураПараметров.Вставить("Колонки", Колонки);
Попытка
ЗаполнитьТабличныйДокументИзМассива(СтруктураПараметров, МассивДанныхКолонок, ВсегоСтрок-НачальнаяСтрока +1, ВсегоКолонок);
Исключение
Сообщить("Ошибка в блоке <ЗаполнитьТабличныйДокументИзМассива>: " + ОписаниеОшибки());
КонецПопытки;
//Когда после отчитки эксель предлагает визуальное сохранение
Excel.WorkBooks.Application.DisplayAlerts = False; //отключаем вывод пользовательских действий над эксель
Excel.WorkBooks.Close();
Excel.Quit();
Excel = 0;
Возврат Истина;
КонецФункции // ()
&НаСервереБезКонтекста
Процедура ЗаполнитьТабличныйДокументИзМассива(СтруктураПараметров, МассивДанныхКолонок, ВсегоСтрок, ВсегоКолонок)
Колонки = СтруктураПараметров.Колонки;
ТЗ = Новый ТаблицаЗначений;
Для Счетчик = 1 По ВсегоКолонок Цикл
ИмяКолонки = Колонки.Получить(Счетчик);
Если ИмяКолонки = Неопределено Тогда
ТЗ.Колонки.Добавить("Колонка"+Счетчик, Новый ОписаниеТипов("Строка"));
Продолжить;
КонецЕсли;
ТЗ.Колонки.Добавить(ИмяКолонки, Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(100)));
КонецЦикла;
Для Счетчик = 1 По ВсегоСтрок Цикл НоваяСтрока = ТЗ.Добавить() КонецЦикла;
Для Счетчик = 0 По ВсегоКолонок-1 Цикл ТЗ.ЗагрузитьКолонку(МассивДанныхКолонок[Счетчик], Счетчик) КонецЦикла;
СтруктураПараметров.Вставить("АдресВХранилище", ПоместитьВоВременноеХранилище(ТЗ, Новый УникальныйИдентификатор()));
КонецПроцедуры
#КонецОбласти
Комментариев нет:
Отправить комментарий