Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) ODBCRecordSet + Excel (число прочтений - 26351 )
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
ODBCRecordSet + Excel
15. Ноября 2006 :: 10:20
Печать  
Блин, вы прикиньте, я совершил прорыв.
Впервые за все это время и загрузил файл Excel через ODBCRecordSet - и мне это понравилось.

А ведь еще можно делать наоборот - экспортировать в Excel через ODBCRecordSet.
Обалдеть. Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


1С++ любитель

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #1 - 15. Ноября 2006 :: 10:47
Печать  
в свое время я подобным образом радовался тому, что подключил Excel через OLE - оказалось, что для функций запроса к данным (по крайней мере) - это далеко не самый выдающийся способ...  Подмигивание
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #2 - 15. Ноября 2006 :: 11:04
Печать  
драйвер какой используешь?
я юзаю штатный Driver={Microsoft Excel Driver (*.xls)};
бывают глюки с типизацией и вообще случается (редко) необяснимое поведение.
и вообще в свое время не смог найти хоть какое-то описание этого драйвера
  

1&&2&&3
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #3 - 15. Ноября 2006 :: 11:18
Печать  
А можно краткую инструкцию по подключению?
Или ссылку на подобную инструкцию?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ODBCRecordSet + Excel
Ответ #4 - 15. Ноября 2006 :: 11:30
Печать  
trad писал(а) 15. Ноября 2006 :: 11:04:
драйвер какой используешь?
я юзаю штатный Driver={Microsoft Excel Driver (*.xls)};
бывают глюки с типизацией и вообще случается (редко) необяснимое поведение.
и вообще в свое время не смог найти хоть какое-то описание этого драйвера

Все то же самое;
Типизацию не использую сейчас - у меня просто обработка каталогов, текст и числа, никаких представлений.

artbear
У меня все очень просто пока:
Код
Выбрать все
	_база =СоздатьОбъект("ODBCDatabase");
	Если _база.Соединение("DRIVER=Microsoft Excel Driver (*.xls); DBQ=" +СокрЛП(_имя)) =0 Тогда
		Предупреждение("Ошибка открытия файла", 60);
		Возврат;
	КонецЕсли;

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

	_стр ="
	|select *
	|from ИмяТаблицы
	|";

	_ит =СоздатьОбъект("ИндексированнаяТаблица");
	_рс.ВыполнитьИнструкцию(_стр, _ит);
 



И в Excele нужно вставить имена областей, к которым будешь обращаться (имена таблиц).
Верхнюю строчку можно использовать как заголовки колонок.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #5 - 15. Ноября 2006 :: 11:40
Печать  
>>Если _база.Соединение("DRIVER=Microsoft Excel Driver (*.xls); DBQ=" +СокрЛП(_имя)) =0 Тогда

Имя это что? Путь файла или имя DSN ?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #6 - 15. Ноября 2006 :: 11:47
Печать  
artbear писал(а) 15. Ноября 2006 :: 11:40:
>>Если _база.Соединение("DRIVER=Microsoft Excel Driver (*.xls); DBQ=" +СокрЛП(_имя)) =0 Тогда

Имя это что? Путь файла или имя DSN ?

http://www.connectionstrings.com/
думаю на этом сайте ты найдешь ответ на свой вопрос, и не только по Excel...
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ODBCRecordSet + Excel
Ответ #7 - 15. Ноября 2006 :: 12:30
Печать  
Цитата:
artbear писал(а) 15. Ноября 2006 :: 11:40:
>>Если _база.Соединение("DRIVER=Microsoft Excel Driver (*.xls); DBQ=" +СокрЛП(_имя)) =0 Тогда

Имя это что? Путь файла или имя DSN ?

http://www.connectionstrings.com/
думаю на этом сайте ты найдешь ответ на свой вопрос, и не только по Excel...

О, Славко, это надо в FAQ!
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #8 - 15. Ноября 2006 :: 14:01
Печать  
Вроде это уже было в Факе Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #9 - 15. Ноября 2006 :: 14:39
Печать  
DrACe писал(а) 15. Ноября 2006 :: 10:47:
в свое время я подобным образом радовался тому, что подключил Excel через OLE - оказалось, что для функций запроса к данным (по крайней мере) - это далеко не самый выдающийся способ...  Подмигивание


Адназначна! Улыбка

Вот, с болью в сердце выдираю из контекста:

Код
Выбрать все
    With ActiveWorkbook.PivotCaches.Add(SourceType:=xlExternal)
        .Connection = Array(Array( _
        "ODBC;DRIVER=SQL Server;SERVER=МойSERVER;UID=;APP=Microsoft Office 2003;WSID=;Network=DBMSSOCN;Address=МойSERVER,1433;Trusted_" _
        ), Array("Connection=Yes"))
        .CommandType = xlCmdSql
        .CommandText = _
        "SELECT ИмяТипаТаблицы.Реферер, ИсчоОднаТаблица.ТоргМарка, Sum(ОпятьБлинИмяТаблицы.ВыхСумма) AS 'Вых', Sum(ОпятьБлинИмяТаблицы.КолВо) AS 'Кол'" _
         & Chr(13) & "" & Chr(10) & "FROM ИмяТипаБазы.dbo.ИмяТипаТаблицы ИмяТипаТаблицы, ИмяТипаБазы.dbo.ОпятьБлинИмяТаблицы " _
         & "ОпятьБлинИмяТаблицы, ИмяТипаБазы.dbo.ИсчоОднаТаблица ИсчоОднаТаблица" & Chr(13) & "" & Chr(10) &  _
         "WHERE ОпятьБлинИмяТаблицы.ПолеСвязиКлиент = ИмяТипаТаблицы.ПолеСвязиКлиент AND ОпятьБлинИмяТаблицы.ПолеСвязиТовар = ИсчоОднаТаблица.ПолеСвязиТовар" _
         & Chr(13) & "" & Chr(10) & "GROUP BY ИмяТипаТаблицы.Реферер, ИсчоОднаТаблица.ТоргМарка"
        .CreatePivotTable TableDestination:="", TableName:="СводнаяТаблица1", _
        DefaultVersion:=xlPivotTableVersion10
    End With
    ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
    ActiveSheet.Cells(3, 1).Select
    ActiveSheet.PivotTables("СводнаяТаблица1").AddFields RowFields:=Array( _
        "Реферер", "Данные"), ColumnFields:="ТоргМарка"
    With ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("Вых")
        .Orientation = xlDataField
        .Caption = "СумВых"
        .Position = 1
        .NumberFormat = "# ##0"
    End With
    With ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("Кол")
        .Orientation = xlDataField
        .Caption = "СумКол"
        .NumberFormat = "# ##0"
    End With 

  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
HeiHeShang
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 101
Зарегистрирован: 01. Августа 2006
Re: ODBCRecordSet + Excel
Ответ #10 - 18. Ноября 2006 :: 05:30
Печать  
А кто подскажет как вставить строки в Excel, пытаюсь это сделать запросом
INSERT INTO [Лист1$] SELECT CODE,DESCR FROM dbo.ИП.SC33
выдает ошибку
"State 42000, native 4294965487, message [Microsoft][ODBC Excel Driver] Cannot update.  Database or object is read-only."
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #11 - 18. Ноября 2006 :: 08:04
Печать  
[quote author=kms link=1163586032/0#0 date=1163586032]Блин, вы прикиньте, я совершил прорыв.
Впервые за все это время и загрузил файл Excel через ODBCRecordSet - и мне это понравилось.

А ведь еще можно делать наоборот - экспортировать в Excel через ODBCRecordSet.
Обалдеть. :)
[/quote]

Мало того, в запросе можно джойнить разные файлы, обращаясь к таблице таким образом:
[code]SELECT * FROM `\\tss\share\data`.[Material$] Material[/code]
Но подключение должно быть . [code]"Driver={Microsoft Excel Driver (*.xls)};DriverId=790;FileUsage=0;Dbq=" + КаталогИБ() + "Siemens;DefaultDir=" + КаталогИБ() + "Siemens\;ReadOnly=1;"[/code]
;ReadOnly = 0 позволит апдейтить таблицы.
;HDR=No Позволит обращаться к колонкам как F1, F2, F3 и т.д.
[hr]

Если имя таблицы имеет пробел или специальный символ, то надо обращаться так [Таблица 1$]
[hr]

А ты попробуй олю, там еще шустрее работает :)
Только до сих пор не решена проблема [url]http://itland.ru/forum//index.php?showtopic=15469&hl=ole&st=15[/url]
Но как там и написано, для первого листа это решается SELECT * FROM [A:FF], т.е. задаем заведомо больший диапазон. Драйвер все равно ограничит выборку реальными данными.

Подключение [code]OLEDBData = СоздатьОбъект("OLEDBData");
OLEDBData.Соединение("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Каталог + ИмяФайла + ";Extended Properties=""Excel 8.0;HDR=No""");
Command = OLEDBData.СоздатьКоманду();[/code]
[hr]

Ложка дегтя. Драйвер САМ определяет тип колонки по первым 15 строкам (значение правится в реестре). И если у тебя сперва идут цифры, то дальнейший текст в выборке исчезнет. Решение проблемы я так и не нашел. И сей факт накладывает большие ограничения на использование запросов к ехелю :(
  
Наверх
 
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #12 - 18. Ноября 2006 :: 08:59
Печать  
[quote author=Arta link=1163586032/0#11 date=1163837043]Ложка дегтя. Драйвер САМ определяет тип колонки по первым 15 строкам (значение правится в реестре). И если у тебя сперва идут цифры, то дальнейший текст в выборке исчезнет. Решение проблемы я так и не нашел. И сей факт накладывает большие ограничения на использование запросов к ехелю :([/quote]


Элементарно, Ватсон! ©

[code][HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel]
"TypeGuessRows"=dword:00000008[/code]
Ставишь сюда, сколько ты хочешь строк на угадывание типа колонки - и тащишься. Впрочем, больше 16 ставить почему-то нельзя, поэтому ставишь ноль и тогда анализируется весь набор данных.


ЗЫЖ Вот, нашел еще описание непосредственно на мелкософте:
[url]http://support.microsoft.com/kb/189897/EN-US/[/url]
  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #13 - 18. Ноября 2006 :: 09:02
Печать  
И... не срабатывет Печаль
Я уже это проходил Печаль

По крайней мере Win2003 + Office 2003
  
Наверх
 
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #14 - 18. Ноября 2006 :: 09:22
Печать  
Arta писал(а) 18. Ноября 2006 :: 09:02:
И... не срабатывет Печаль
Я уже это проходил Печаль

По крайней мере Win2003 + Office 2003


Проверь еще что в той же ветке реестра ключик ImportMixedTypes=Text

А вобще-то все это вроде можно в коннэкшен стринг задавать явно, в Extended Properties.
Что-то типа: ImportMixedTypes=Text; TypeGuessRows=0;

Но близко я с этим не сталкивался, пошарь сам в сетях-форумах.

Да, и еще есть такой параметр как IMEX. Чего он делает и какой по умолчанию - убей, не знаю. Но его тоже можно пихать в Extended Properties, и при каких-то значениях все должно нормально работать. Но при каких - точно не скажу. Попробуй 1 и 100. Если не поможет - опять же, ищи в сетях-форумах.
  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #15 - 18. Ноября 2006 :: 09:28
Печать  
Ага, вот нашел:

http://support.microsoft.com/kb/194124/EN-US/

Setting IMEX=1 tells the driver to use Import mode. In this state, the registry setting ImportMixedTypes=Text will be noticed. This forces mixed data to be converted to text.
  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #16 - 18. Ноября 2006 :: 09:40
Печать  
Вот ведь черт... ImportMixedTypes=Text стояло, а вот вместе с IMEX=1 не пробовал Улыбка

Теперь осталось решить проблему, чтобы не драйвер не приводил числа в эксп.форму (5.00011e+010 и т.д.) и все будет гуд Улыбка



P.S. Большущее спасибо Улыбка
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ODBCRecordSet + Excel
Ответ #17 - 18. Ноября 2006 :: 09:51
Печать  
Quan, Arta

Я вас поместил в фак Улыбка

Кстати, для эксп. форм можно выкрутиться так:
Код
Выбрать все
	_м =СоздатьОбъект("Math");
	Сообщить(_м.Double("5.00011e+010"));
 

  

De quelle planète es-tu?
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #18 - 18. Ноября 2006 :: 09:55
Печать  
Да знаю Улыбка
но ты же понимаешь, что это уже будет изврат. Хочется получить все данные за один заход. Тем более что мне надо еще и джойнить таблицу Печаль

CONVERT нету
на CAST при любом datatype ругается FAILED! ICommandText::Execute():

больше ничего подобрать не могу Улыбка
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #19 - 18. Ноября 2006 :: 11:58
Печать  
Отвечаю сам себе. Поле станет текстовым (и драйвер не будет его никак конвертировать) при IMEX=1 и типе эхельной колонки не Текстовый, а только Общий.
  
Наверх
 
IP записан
 
HeiHeShang
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 101
Зарегистрирован: 01. Августа 2006
Re: ODBCRecordSet + Excel
Ответ #20 - 18. Ноября 2006 :: 12:13
Печать  
Можно конечно и оле дб использовать, но вот если оно не стоит на компе, тогда ой. Может подскажете как поставить ?
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #21 - 18. Ноября 2006 :: 12:19
Печать  
HeiHeShang писал(а) 18. Ноября 2006 :: 12:13:
Можно конечно и оле дб использовать, но вот если оно не стоит на компе, тогда ой. Может подскажете как поставить ?



Твоя проблема решается ;ReadOnly = 0  в Extended properties
  
Наверх
 
IP записан
 
HeiHeShang
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 101
Зарегистрирован: 01. Августа 2006
Re: ODBCRecordSet + Excel
Ответ #22 - 18. Ноября 2006 :: 12:47
Печать  
К сожалению не решается, пробовал.
  
Наверх
 
IP записан
 
HeiHeShang
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 101
Зарегистрирован: 01. Августа 2006
Re: ODBCRecordSet + Excel
Ответ #23 - 18. Ноября 2006 :: 12:52
Печать  
Может строка подключения неправильная ?

Driver={Microsoft Excel Driver (*.xls)}СмехriverId=790;Dbq=F:\MyExcel.xls;DefaultDir=F:\;ReadOnly=0;
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #24 - 26. Ноября 2006 :: 21:55
Печать  
С ОЛЕДБ вылезает проблема.
Делаю простой запрос Select * from [Sheet1$]
Вываливается в ошибку:
FAILED! ICommandText::Execute(): The Microsoft Jet database engine could not find the object 'Sheet1_1c_type_'.  Make sure the object exists and that you spell its name and the path name correctly.

А типа как тогда использовать знак доллара, если он не раздумываю пытается типизировать?
  
Наверх
 
IP записан
 
Antares
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 23
Зарегистрирован: 30. Ноября 2006
Re: ODBCRecordSet + Excel
Ответ #25 - 05. Декабря 2006 :: 05:55
Печать  
Очень очень давно я пользовал DDE из 1с6 - завязывался на excel. Интересно сейчас это кто-нибудь пользует?
  
Наверх
 
IP записан
 
bes
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 4
Зарегистрирован: 06. Декабря 2006
Re: ODBCRecordSet + Excel
Ответ #26 - 06. Декабря 2006 :: 15:26
Печать  
та же беда что и у "Arta", простейший запрос
     Текст ="
     |select
     | *
     |from [Платежи$]
     |";   

и не взлетает Печаль. Кто знает как быть??
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ODBCRecordSet + Excel
Ответ #27 - 06. Декабря 2006 :: 21:18
Печать  
Arta писал(а) 18. Ноября 2006 :: 08:04:
Ложка дегтя. Драйвер САМ определяет тип колонки по первым 15 строкам (значение правится в реестре). И если у тебя сперва идут цифры, то дальнейший текст в выборке исчезнет. Решение проблемы я так и не нашел. И сей факт накладывает большие ограничения на использование запросов к ехелю Печаль

Как же это сцуко мне сегодня нервов попортило.

Оказывается, в обратную сторону - те же грабли.
Если сперва идет текст, - то дальнейшие цифры в выборке тоже исчезают.

Причем не спасают ни общий формат ячеек, ни IMEX=1.
Пришлось весь лист переформатировать в чистый текст.

Маразм, блин. Как непостоянна любовь.  Озадачен
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #28 - 06. Декабря 2006 :: 21:30
Печать  
а ImportMixedTypes=Text?  Подмигивание
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ODBCRecordSet + Excel
Ответ #29 - 06. Декабря 2006 :: 21:52
Печать  
Arta писал(а) 06. Декабря 2006 :: 21:30:
а ImportMixedTypes=Text?  Подмигивание

Прикинь, я только что догнал, в чем проблема!

У меня первые 8 значений - чистый текст.
Т.е. нет как такового факта "MixedTypes" - только текст, стало быть любые числа после - это NULL, а указание ImportMixedTypes - игнорируется, т.к. неприменимо.

Можно, конечно, поставить TypeGuessRows=0, но будут тормоза.

Короче, я понял, это как раз из серии "чтоб всем ребятам всем трулялятам было веселей" Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #30 - 06. Декабря 2006 :: 22:23
Печать  
Я долго имел гемор с этим извратом.
Теперь просто пошел по пути скидывания xls в MSSQL. Слава богу в EMS SQL Manager работает копи-пасте для выделенных ячеек экселя.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ODBCRecordSet + Excel
Ответ #31 - 06. Декабря 2006 :: 22:57
Печать  
А я вот, пока набросал макрос для трансформации первых колонок в текст:
Цитата:
Sub formatnum()
i = 1
Do While Range("A" + CStr(i)) <> ""
    s = "A" + CStr(i)
    v = Range(s).Value
    If IsNumeric(v) Then
       Range(s).Value = "'" + CStr(v)
    End If
   
    s = "B" + CStr(i)
    v = Range(s).Value
    If IsNumeric(v) Then
       Range(s).Value = "'" + CStr(v)
    End If
   
    s = "C" + CStr(i)
    v = Range(s).Value
    If IsNumeric(v) Then
       Range(s).Value = "'" + CStr(v)
    End If
   
    i = i + 1
Loop
End Sub

Как это написать красиво? Это мой первый шедевр на VBA. Круглые глаза
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #32 - 06. Декабря 2006 :: 23:20
Печать  
У меня руки не поднимаются посягнуть на VBA Улыбка
  
Наверх
 
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #33 - 07. Декабря 2006 :: 06:36
Печать  
kms писал(а) 06. Декабря 2006 :: 22:57:
А я вот, пока набросал макрос для трансформации первых колонок в текст:
Цитата:
Sub formatnum()
....
End Sub

Как это написать красиво? Это мой первый шедевр на VBA. Круглые глаза


Я бы сделал так:
Код
Выбрать все
Sub formatnum()
    LastRow = Cells(1, 1).End(xlDown).Row
    Row = 1
    Do While Row <= LastRow
	  Col = 1
	  Do While Col <= 3
		v = Cells(Row, Col).Value
		If IsNumeric(v) Then
		    Cells(Row, Col).Value = "'" + CStr(v)
		End If
		Col = Col + 1
	  Loop

	  Row = Row + 1
    Loop
End Sub
 

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


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ODBCRecordSet + Excel
Ответ #34 - 07. Декабря 2006 :: 08:49
Печать  
ADirks писал(а) 07. Декабря 2006 :: 06:36:
Я бы сделал так:

Супер, спасибо.
И намного быстрее, кстати.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Максим
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 1
Зарегистрирован: 01. Сентября 2008
Re: ODBCRecordSet + Excel
Ответ #35 - 01. Сентября 2008 :: 18:46
Печать  
Код
Выбрать все
	_база =СоздатьОбъект("ODBCDatabase");
	Если _база.Соединение("DRIVER=Microsoft Excel Driver (*.xls); DBQ=" +СокрЛП(_имя)) =0 Тогда
		Предупреждение("Ошибка открытия файла", 60);
		Возврат;
	КонецЕсли;

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

	_стр ="
	|select *
	|from ИмяТаблицы
	|";

	_ит =СоздатьОбъект("ИндексированнаяТаблица");
	_рс.ВыполнитьИнструкцию(_стр, _ит); 


Я конечно новичек, но я бы попробовал так:
Код
Выбрать все
	|from [ИмяТаблицы$ДиапазонЯчеек] 


Мой личный пример:
Код
Выбрать все
	|from [Лист1$A10:AZ] 


Выборка производится начиная с 10-й строки Листа1 до конца данных.
10-я строка становится заголовком таблицы.

Это точно проверено, также и на компах где никогда не устанавливался Офис.
« Последняя редакция: 01. Сентября 2008 :: 20:23 - Максим »  
Наверх
 
IP записан
 
Zloslaw
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 1
Зарегистрирован: 29. Июля 2009
Re: ODBCRecordSet + Excel
Ответ #36 - 17. Августа 2009 :: 10:24
Печать  
Пацаны, а можно как нить в ёхель инсэртить? Если возможно приведите плиз простой пример...
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #37 - 17. Августа 2009 :: 13:13
Печать  
Zloslaw писал(а) 17. Августа 2009 :: 10:24:
Пацаны, а можно как нить в ёхель инсэртить? Если возможно приведите плиз простой пример...

так читай ветку сначала.
Только лучше делать в exel в пустой файл
также можно получать dbf и его читать в Exsel.
Еще можно использовать Йоксел.

  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать