Имя: Пароль:
1C
 
Чтение из Excel в 1С через ADO
0 Господин ПЖ
 
15.03.11
18:38
Начало стандартное - провайдер, строка соединения и т.п. неинтересные вещи.

Потом интереснее уже:

   Catalog = Новый COMОбъект("ADOX.Catalog");
   Catalog.ActiveConnection = БазаЭкселя;
   
   лсзИменаЛистовКниги = Новый СписокЗначений;
   лсИмяЛиста = "";

   Если ИмяНомерЛиста <> Неопределено тогда
       
       Попытка
             лсИмяЛиста = Catalog.Tables.Item(ИмяНомерЛиста).Name;    
       Исключение
       КонецПопытки;
       
   КонецЕсли;
   
   Для iCount = 0 По Catalog.Tables.Count - 1 Цикл
       Если Catalog.Tables.Item(iCount).Type = "TABLE" Тогда
           лсзИменаЛистовКниги.Добавить(Catalog.Tables.Item(iCount).Name);    
       КонецЕсли;
   КонецЦикла;


в списке получаю имена листов книги:

Справочник$
Справочник$_FilterDatabase
Расходы 2011$

в самой книге при открытии ее обычным экселем порядок такой:

Расходы 2011
Справочник

Т.е. все в обратном порядке + непонятная таблица Справочник$_FilterDatabase (я подозреваю что это автофильтр наложенный на лист Справочник - хотя не уверен).

Собственно а как получить порядок и количество листов соответствующий тому что отображается пользователю в эксель?

Строка подключения простая:

БазаЭкселя = Новый COMОбъект("ADODB.Connection");
СтрокаПодключения = "
|Provider=Microsoft.Jet.OLEDB.4.0;
|Data Source=" + ИмяФайла + ";
|Extended Properties=""Excel 8.0;IMEX=1;HDR=No";"";";
1 detec
 
15.03.11
18:46
(0)

лсзИменаЛистовКниги - вот список,  FilterDatabase - это типа скрытой, несуществующей таблицы. А в чём сакральный смысл выдержать порядок листов в Excel'e?
2 Господин ПЖ
 
15.03.11
18:56
(1) имя листа неизвестно... надо обрабатывать только первый (для юзера) лист...