Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Запрос к документу excel (число прочтений - 9664 )
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Запрос к документу excel
Ответ #15 - 22. Марта 2012 :: 04:18
Печать  
(14)
Код
Выбрать все
//СЗТаблицы - Список на форме куда будут записаны все листы таблицы
// ИмяБД полный путь к xls
// Заголовок   считать первую строку заголовком

	cn = CreateObject("ADODB.Connection");
	rs = СоздатьОбъект("ADODB.Recordset");
	cat = СоздатьОбъект("ADOX.Catalog");	СЗТаблицы.УдалитьВсе();

	cn.ConnectionString = "
	|Provider=Microsoft.Jet.OLEDB.4.0;
	|Password="""";
	|User ID=Admin;
	|Data Source=" + СокрЛП(ИмяБД) + ";
	|Mode=Share Deny Write;
	|Extended Properties=""HDR=" + ?(Заголовок = 1, "YES", "NO") + ";"";
	|Jet OLEDB:System database="""";
	|Jet OLEDB:Registry Path="""";
	|Jet OLEDB:Database Password="""";
	|Jet OLEDB:Engine Type=35;
	|Jet OLEDB:Database Locking Mode=0;
	|Jet OLEDB:Global Partial Bulk Ops=2;
	|Jet OLEDB:Global Bulk Transactions=1;
	|Jet OLEDB:New Database Password="""";
	|Jet OLEDB:Create System Database=False;
	|Jet OLEDB:Encrypt Database=False;
	|Jet OLEDB:Don't Copy Locale on Compact=False;
	|Jet OLEDB:Compact Without Replica Repair=False;
	|Jet OLEDB:SFP=False";
	cn.Open();
	cat.ActiveConnection = cn;

	Для Индекс = 0 По cat.Tables.Count - 1 Цикл
		Name = cat.Tables(Индекс).Name;
		Если Лев(Name, 4) = "MSys" Тогда
			Продолжить;
		КонецЕсли;
		Если cat.Tables(Индекс).Type = "VIEW" Тогда
			Продолжить;
		КонецЕсли;
		Сим1 = Прав(Name,1);
		Если Сим1 = "_" Тогда Продолжить; КонецЕсли;
		СЗТаблицы.ДобавитьЗначение(Name);
	КонецЦикла;

 

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


1C++ ->

Сообщений: 361
Местоположение: Барнаул
Зарегистрирован: 05. Сентября 2009
Пол: Мужской
Re: Запрос к документу excel
Ответ #16 - 22. Марта 2012 :: 04:37
Печать  
Да не хочу я перебором!
Мне бы проделать следующие манипуляции с данными документа:
1) Определить, в какой строке есть определенное слово ("Товар"), причем заранее неизвестно, в какой колонке.
Вопрос: как грамотно задать условие в запросе(любая колонка Подобна 'Товар%')?
2) Поставить условие на имена колонок (так как колонки в документе могут выглядеть как объединения колонок, то этим шагом откидываем все пустые и ненужные колонки).
Вопрос: как грамотно выбрать колонки в результат, если их имена находятся в строке?
3) Определить имена листов в документе excel(чтоб использовать их вместо "sheet1")?
  

Каждая система проходит три стадии:&&1) Шумиха&&2) Неразбериха&&3) Поиск виновных (собственно, рабочий процесс)&&4) Наказание невиновных&&5) Награждение непричастных&& В.М. Глушков
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Запрос к документу excel
Ответ #17 - 22. Марта 2012 :: 04:41
Печать  
(16)

смотри 15 на 3 вопрос

1 и 2 делай конкатенацию столбцов и ищи в этом выражении с помощью like  Товар
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Запрос к документу excel
Ответ #18 - 22. Марта 2012 :: 06:54
Печать  
al_zzz писал(а) 22. Марта 2012 :: 01:36:
trad писал(а) 21. Марта 2012 :: 06:33:
|from [Sheet1$A1:FF]

trad, не подскажете, как определить имя листа в документе ексель?

меню файл-свойства-состав (это если интерактивно)
  

1&&2&&3
Наверх
 
IP записан
 
al_zzz
Senior Member
****
Отсутствует


1C++ ->

Сообщений: 361
Местоположение: Барнаул
Зарегистрирован: 05. Сентября 2009
Пол: Мужской
Re: Запрос к документу excel
Ответ #19 - 22. Марта 2012 :: 07:34
Печать  
trad писал(а) 22. Марта 2012 :: 06:54:
al_zzz писал(а) 22. Марта 2012 :: 01:36:
trad писал(а) 21. Марта 2012 :: 06:33:
|from [Sheet1$A1:FF]

trad, не подскажете, как определить имя листа в документе ексель?

меню файл-свойства-состав (это если интерактивно)

Нет. Программно надо.
  

Каждая система проходит три стадии:&&1) Шумиха&&2) Неразбериха&&3) Поиск виновных (собственно, рабочий процесс)&&4) Наказание невиновных&&5) Награждение непричастных&& В.М. Глушков
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Запрос к документу excel
Ответ #20 - 22. Марта 2012 :: 13:10
Печать  
al_zzz писал(а) 22. Марта 2012 :: 07:34:
Нет. Программно надо.

знаю только через ОЛЕ
цикл до Book.sheets.count
Book.sheets.item(i).name
  

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Запрос к документу excel
Ответ #21 - 22. Марта 2012 :: 13:13
Печать  
А чем Вам 15 не программно ?
ADOX  это аналог методанных для ADO

ps Точно код работающий правда написан был 5 лет назад
  
Наверх
 
IP записан
 
al_zzz
Senior Member
****
Отсутствует


1C++ ->

Сообщений: 361
Местоположение: Барнаул
Зарегистрирован: 05. Сентября 2009
Пол: Мужской
Re: Запрос к документу excel
Ответ #22 - 23. Марта 2012 :: 03:49
Печать  
Z1 писал(а) 22. Марта 2012 :: 04:18:
(14)
Код
Выбрать все
//СЗТаблицы - Список на форме куда будут записаны все листы таблицы
// ИмяБД полный путь к xls
// Заголовок   считать первую строку заголовком

	cn = CreateObject("ADODB.Connection");
	rs = СоздатьОбъект("ADODB.Recordset");
	cat = СоздатьОбъект("ADOX.Catalog");	СЗТаблицы.УдалитьВсе();

	cn.ConnectionString = "
	|Provider=Microsoft.Jet.OLEDB.4.0;
	|Password="""";
	|User ID=Admin;
	|Data Source=" + СокрЛП(ИмяБД) + ";
	|Mode=Share Deny Write;
	|Extended Properties=""HDR=" + ?(Заголовок = 1, "YES", "NO") + ";"";
	|Jet OLEDB:System database="""";
	|Jet OLEDB:Registry Path="""";
	|Jet OLEDB:Database Password="""";
	|Jet OLEDB:Engine Type=35;
	|Jet OLEDB:Database Locking Mode=0;
	|Jet OLEDB:Global Partial Bulk Ops=2;
	|Jet OLEDB:Global Bulk Transactions=1;
	|Jet OLEDB:New Database Password="""";
	|Jet OLEDB:Create System Database=False;
	|Jet OLEDB:Encrypt Database=False;
	|Jet OLEDB:Don't Copy Locale on Compact=False;
	|Jet OLEDB:Compact Without Replica Repair=False;
	|Jet OLEDB:SFP=False";
	cn.Open();
	cat.ActiveConnection = cn;

	Для Индекс = 0 По cat.Tables.Count - 1 Цикл
		Name = cat.Tables(Индекс).Name;
		Если Лев(Name, 4) = "MSys" Тогда
			Продолжить;
		КонецЕсли;
		Если cat.Tables(Индекс).Type = "VIEW" Тогда
			Продолжить;
		КонецЕсли;
		Сим1 = Прав(Name,1);
		Если Сим1 = "_" Тогда Продолжить; КонецЕсли;
		СЗТаблицы.ДобавитьЗначение(Name);
	КонецЦикла;

 


Этот  код выдал мне всего одну колонку: "TDSheet$" - которой у меня там сроду нет.
  

Каждая система проходит три стадии:&&1) Шумиха&&2) Неразбериха&&3) Поиск виновных (собственно, рабочий процесс)&&4) Наказание невиновных&&5) Награждение непричастных&& В.М. Глушков
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Запрос к документу excel
Ответ #23 - 21. Мая 2012 :: 06:33
Печать  
Вот так работает
Код
Выбрать все
База =СоздатьОбъект("ODBCDatabase");
	Если База.Соединение("DRIVER=Microsoft Excel Driver (*.xls); DBQ=" + СокрЛП(ИмяФайла)) = 0 Тогда
		Предупреждение("Ошибка открытия файла", 20);
		Возврат;
	КонецЕсли;

	RecordSetXLS =СоздатьОбъект("ODBCRecordSet");
	RecordSetXLS.УстБД(База);

	ТекстЗапроса ="
	|select *
	|from [Лист1$A1:AZ]
	|";

	ТЗ = RecordSetXLS.ВыполнитьИнструкцию(ТекстЗапроса); 


  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
ol
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 272
Местоположение: Санкт-Петербург
Зарегистрирован: 24. Января 2009
Пол: Мужской
Re: Запрос к документу excel
Ответ #24 - 25. Октября 2012 :: 12:03
Печать  
а у меня вот ругается на значок $

Код
Выбрать все
Объект 'Материалы_1c_type_A1:FF' не найден ядром базы данных Microsoft Jet.  Проверьте существование объекта и правильность имени и пути.
 


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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Запрос к документу excel
Ответ #25 - 25. Октября 2012 :: 12:06
Печать  
а чего ты там типизируешь в коде ?
Улыбка

ЗЫ: метарпарсер можно и обмануть, если что
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать