вторник, 7 марта 2017 г.

Чтение Excel

Неплохое решение относительно чтения из эксель отчика всей области данных


#Область ЧтениеЕксель

&НаКлиенте
Функция ПрочитатьТабличныйДокументИз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 Цикл ТЗ.ЗагрузитьКолонку(МассивДанныхКолонок[Счетчик], Счетчик) КонецЦикла;

   
СтруктураПараметров.Вставить("АдресВХранилище", ПоместитьВоВременноеХранилище(ТЗ, Новый УникальныйИдентификатор()));

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

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

Комментариев нет:

Отправить комментарий