воскресенье, 27 февраля 2011 г.

ADO доступ к таблице Excel и обработка Листа Excel.

Новый русский вызвал службу по ремонту компютеров.

Приезжают служащие и видят, что в углу могитора здоровая дыра.
-Что ты с ним делал? - спрашивают те.
-Да я тут весь город развожу, а мне какая - то скрепка у виска крутить будет?????


Совсем недавно, потребовалось мне писать код для доступа к файлу Excel по ADO с дальнейшим запросом с использованием SELECT по нему. Для теста мне был предоставлен один файл Excel с единственным листом "Лист1". Обработку я настроил на этот первый лист:

axCatalog = СоздатьОбъект("ADOX.Catalog");
//...
ИмяТаблицы = axCatalog.Tables(1).Name;
//...
//можно еще так:

//ИмяТаблицы = axCatalog.Tables.Item(1).Name;

Далее в коде использовалось ИмяТаблицы для запросов. Тестирование на файле прошло успешно и обработка ушла... Начались баги. Какой-то файл отрабатывает хорошо, какой-то вообще не обрабатывает. Нужно провести подробное тестирование и доработать + еще научить работать с файлом Excel с разными листами.

После тестов прихожу к выводу: коллекция Tables кроме таблиц листов может содержать их "подтаблицы", области печати, именованные диапазоны, отборы, а так же индексы коллекции могут не совпадать с порядком следования листов. 

Поэтому использовать мой код неверно. Первой таблицей может быть не первый лист. И настроить на выбор листа по порядку тоже нет смысла. Поэтому пробую использовать имя Листа и поиск его в коллекции.

При открытии файла Excel заполняем список спСписокЛистовКниги именами Листов файла Excel. Потом пользователь выбирает из списка обрабатываемый Лист, а код:

СтрокаИмяТаблицы = СокрЛП(спСписокЛистовКниги.ПолучитьЗначение(спСписокЛистовКниги.ТекущаяСтрока()));
СтрокаИмяТаблицы = СтрЗаменить(СтрокаИмяТаблицы,".","#");
ИмяТаблицы = СтрокаИмяТаблицы + "$";

получает имя Листа [далее приводится пример]"ЛистПервый", добавляем к названию "$", получая "ЛистПервый$", которое будет использоваться в запросе как ИмяТаблицы.
Если в имени Листа используется ".", то её нужно заменить на "#". Возможно еще какие-то спецсимволы имеют свойство замены в Excel. В предоставленных мне файлах Excel для второго тестирования в имени файла использовалась только точка. Тестировал еще ".!@#$%^&" получив "#_@#$%^&" следовательно:
. - #
! - _

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

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