Как получить порядок листов в Excel?

1. Oboron 14 03.04.15 14:34 Сейчас в теме
Если через ado:

	еБаза = Новый 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.

Интим "Excel.Application" не предлагать :)
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. m_gin 46 13.04.15 12:55 Сейчас в теме
Представления(Views) имеют свойство Count.
3. platon_ 10 13.04.15 13:47 Сейчас в теме
посмотрите тут. может навеет на правильное решение http://infostart.ru/public/193857/
4. m_gin 46 17.04.15 10:02 Сейчас в теме
Удалось ли Вам, Oboron, решить эту задачу?
5. Oboron 14 26.10.15 12:07 Сейчас в теме
Красиво решить не удалось.
Времени особо не было.
Сейчас возвращаться к этой теме уже лень :)
В общем я сделал так:
если в файле всего 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;
КонецФункции

Показать
Оставьте свое сообщение

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