Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Запросы напрямую к Excel. (число прочтений - 6537 )
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Запросы напрямую к Excel.
10. Октября 2007 :: 09:47
Печать  
Приветствую!
Хочу обратиться напрямую к Excel табличке. Проблема, в том, что имена таблиц в Excele (видимо это внутренние имена), оканчиваются на "$", т.е. если ярлычок в Excel'е "Лист1", то таблица будет иметь имя "Лист1$".
Самый простой запрос:

СтрокаЗапроса = "
     |Select
     |      *
     |from 
     |      Лист1$
     |";

Вылетает с ошибкой метапарсера.[] тоже не помогают.
Через ADO запрос работает, но уж очень не хочется бегать и заполнять в цикле ТЗ.
Заранее спасибо.

ЗЫ: с сайта Микрософта
Цитата:
Устранение неполадок•      Помните, что объекты Excel, имена которых содержат знак доллара ($), являются листами (например, Лист1$), другие объекты являются именованными диапазонами Excel.

  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Запросы напрямую к Excel.
Ответ #1 - 10. Октября 2007 :: 10:45
Печать  
можно сохранить xls в dbf файл и далее OLEDB
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Запросы напрямую к Excel.
Ответ #2 - 10. Октября 2007 :: 11:15
Печать  
Z1 писал(а) 10. Октября 2007 :: 10:45:
можно сохранить xls в dbf файл и далее OLEDB

Согласен

Можно еще поименовать области в листах и тогда все работает через 1c++.

  
Наверх
 
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 279
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: Запросы напрямую к Excel.
Ответ #3 - 10. Октября 2007 :: 14:35
Печать  
А если так:

from [Книга].[Лист1$] as лист

где Книга - имя xls-файла без расширения. Вроде работает
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Запросы напрямую к Excel.
Ответ #4 - 11. Октября 2007 :: 06:03
Печать  
У меня ругается

FAILED! ICommandText::Execute(): Объект 'Лист1_1c_type_' не найден ядром базы данных Microsoft Jet.  Проверьте существование объекта и правильность имени и пути.

  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Запросы напрямую к Excel.
Ответ #5 - 11. Октября 2007 :: 07:34
Печать  
Структура базы в которой делаешь запрос?
на SQL вроде такое не происходить
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Запросы напрямую к Excel.
Ответ #6 - 11. Октября 2007 :: 07:44
Печать  
При доступе через OLE через драйвер Fox.
Например у меня таблица $Sc33

Заменяю на

CHR(36)+'sc33' или CHR(36)+[sc33]
В этом случае сивол 36 преобразуется в $ уже после метапарсера

Например
Код
Выбрать все
ТЗ = ОлеДБКоманда.ВыполнитьИнструкцию("Select * From CHR(36)+'sc33'");
 



Не знаю через что Вы подключаетесь к Exel? Но попробуйте, автор Майкрософт - принципы у него
обычно одинаковые
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Запросы напрямую к Excel.
Ответ #7 - 11. Октября 2007 :: 07:46
Печать  
Буквально
Код
Выбрать все
СтрокаЗапроса = "
     |Select
     |	*
     |from
     |	[Лист1]+CHR(36)
     |";
 

  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Запросы напрямую к Excel.
Ответ #8 - 11. Октября 2007 :: 07:58
Печать  
Вариант 2.
Через параметризованные запросы
(если OLE версия 1Сpp должна быть последняя)

код для OLE, но принцип тот же и для ODBC
Код
Выбрать все
ТекстЗапроса="Select * From ?";
	ОлеДБКоманда.ДобПараметр(1,129,5,0,); // третий параметр - длина имени таблицы
	ОлеДБКоманда.Подготовить(ТекстЗапроса);
	ОлеДБКоманда.УстановитьПараметр(1, "$sc33");
    ТЗ = ОлеДБКоманда.ВыполнитьИнструкцию(); 


  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Запросы напрямую к Excel.
Ответ #9 - 11. Октября 2007 :: 10:15
Печать  
Видимо в экселе какие-то ограничения. Перепробовал уже все советы, ничего не получается.

Если есть желание поискать собаку - вот строка подключения.

СтрокаСоединения = "
           |Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " + СокрЛП(ВыбКаталог) + "\" +  СокрЛП(ИмяФайла) +" ;
     |Extended Properties=""Excel 8.0;HDR=YES;""";

Я сейчас через ОЛЕ Автомейшн создаю поименованные области и работаю с ними.
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Запросы напрямую к Excel.
Ответ #10 - 11. Октября 2007 :: 11:37
Печать  
Да, почему то не удалось запустить параметризованный запрос к Exel через OLE Печаль
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запросы напрямую к Excel.
Ответ #11 - 11. Октября 2007 :: 19:22
Печать  
chessman писал(а) 11. Октября 2007 :: 06:03:
У меня ругается

FAILED! ICommandText::Execute(): Объект 'Лист1_1c_type_' не найден ядром базы данных Microsoft Jet.  Проверьте существование объекта и правильность имени и пути.



Не должно бы...
Вот тут обсуждали мы. Давно это было. http://www.1cpp.ru/forum/YaBB.pl?num=1163586032
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Запросы напрямую к Excel.
Ответ #12 - 13. Октября 2007 :: 08:05
Печать  
Arta респект.

Поиск не находил этой ветки.

« Последняя редакция: 15. Октября 2007 :: 06:54 - chessman »  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать