// Функция получает данные из Excel через ADO
//
// Параметры:
// ИмяФайла - имя файла в формате Excel, из которого необходимо прочитать данные
// ИмяНомерЛиста - имя или номер листа книги Excel, из которого необходимо прочитать данные
// ЗаголовкиКолонокВПервойСтроке - первая строка листа книги Excel содержит заголовки. Колонки получаемой таблицы будут иметь соответствующие имена
// Возвращаемое значение:
// Таблица значений. Имена колонок = F1, F2 и пр. при параметре ЗаголовкиКолонокВПервойСтроке = Ложь.
//
Функция ПрочитатьТаблицуЗначенийИзExcel(ИмяФайла, Знач ИмяНомерЛиста = Неопределено, ЗаголовкиКолонокВПервойСтроке = Ложь, ИспользоватьПорядокЛистовКакВПриложенииExcel = Ложь, АктивныйЛист = Ложь) Экспорт
//Если опущен, тогда 1-й лист
еБаза = ПодключитьсяКБазеExcel(ИмяФайла, ЗаголовкиКолонокВПервойСтроке);
Если еБаза = Неопределено Тогда
Возврат Новый ТаблицаЗначений;
КонецЕсли;
Catalog = Новый COMОбъект("ADOX.Catalog");
Catalog.ActiveConnection = еБаза;
Если Catalog.Tables.Count() > 1 И (ИспользоватьПорядокЛистовКакВПриложенииExcel Или АктивныйЛист) Тогда //Если 1 лист - то всё понятно. Он и активный.
Excel = ОткрытьExcelИПолучитьИмяСтраницы(ИмяФайла, ИмяНомерЛиста, АктивныйЛист);
Если Excel = Неопределено Тогда
Возврат Новый ТаблицаЗначений;
КонецЕсли;
Excel.WorkBooks.Close();
Excel.Quit();
Иначе
Если ИмяНомерЛиста = Неопределено Тогда
ИмяНомерЛиста = 0;
КонецЕсли;
Попытка
ИмяНомерЛиста = Catalog.Tables.Item(ИмяНомерЛиста).Name;
Исключение
Возврат Новый ТаблицаЗначений;
КонецПопытки;
КонецЕсли;
Возврат ПолучитьТаблицуИзSQL(еБаза, , , ОбщегоНазначения.ПодставитьПараметрыВСтроку("SEL ECT * FR OM [%1]", ИмяНомерЛиста));
Конецфункции
Функция ОткрытьExcelИПолучитьИмяСтраницы(ИмяФайла, ИмяНомерЛиста = Неопределено, АктивныйЛист = Ложь) Экспорт
#Если Клиент Тогда
Состояние("Запуск приложения Excel");
#КонецЕсли
Excel = Новый COMОбъект("Excel.Application");
Excel.DisplayAlerts = False;
Попытка
Excel.WorkBooks.Open(ИмяФайла);
Если ИмяНомерЛиста <> Неопределено Тогда
Попытка
ИмяНомерЛиста = Excel.Sheets(ИмяНомерЛиста).Name;
Исключение
КонецПопытки;
Иначе
Если АктивныйЛист Тогда
ИмяНомерЛиста = Excel.ActiveSheet.Name + "$";
Иначе
//ИмяНомерЛиста = Excel.Sheets[0].Name + "$";
лСпис = Новый СписокЗначений;
Для Каждого Лист Из Excel.Sheets Цикл
лСпис.Добавить(Лист.Name + "$");
КонецЦикла;
ИмяНомерЛиста = лСпис[0];
КонецЕсли;
КонецЕсли;
Исключение
Excel.WorkBooks.Close();
Excel.Quit();
Возврат Неопределено;
КонецПопытки;
Если Найти(ИмяФайла, ".xlsx") = 0 Тогда
Excel.ActiveWorkbook.SaveAs(ПолучитьИмяВременногоФайла(".xls"), КонстантыVBA().xlWorkbookNormal);
КонецЕсли;
Возврат Excel;
КонецФункции
|