Если через ado:
то листы идут по алфавиту. А мне надо именно в том порядке, что я увижу открыв excel.
Интим "Excel.Application" не предлагать :)
еБаза = Новый COMОбъект("ADODB.Connection");
СтрокаПодключения = "
|Provider=Microsoft.ACE.OLEDB.12.0;
|Data Source=%1;
|Extended Properties=""Excel 12.0 Xml;IMEX=1;HDR=%2;"";";
СтрокаПодключения = ОбщегоНазначения.ПодставитьПараметрыВСтроку(СтрокаПодключения, ИмяФайла, ?(ЗаголовкиКолонокВПервойСтроке, "Yes", "No"));
еБаза.Open(СтрокаПодключения);
Catalog = Новый COMОбъект("ADOX.Catalog");
Catalog.ActiveConnection = еБаза;
Для Каждого Лист Из Catalog.Tables Цикл
Показатьто листы идут по алфавиту. А мне надо именно в том порядке, что я увижу открыв excel.
По теме из базы знаний
- Путевой лист легкового автомобиля 1С:Бухгалтерия 3.0
- Универсальная загрузка данных формата Excel
- Библиотека процедур и функций для технологической платформы "1С: Предприятие 7.7"
- Импортозамещение. Перевод промышленного предприятия с M3 Infor на 1С:ERP за 2 месяца по технологии SCRUM
- Несколько альтернативных универсальных способов подбора ссылок при переносах данных
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Красиво решить не удалось.
Времени особо не было.
Сейчас возвращаться к этой теме уже лень :)
В общем я сделал так:
если в файле всего 1 лист, то берем его. Иначе запускаем Excel.Application и берем ActiveSheet:
Времени особо не было.
Сейчас возвращаться к этой теме уже лень :)
В общем я сделал так:
если в файле всего 1 лист, то берем его. Иначе запускаем Excel.Application и берем ActiveSheet:
// Функция получает данные из 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;
КонецФункции
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот