Имя: Пароль:
1C
1С v8
ADODB + xls
, ,
0 fatal_error
 
08.01.14
13:48
Добрый день, возникла проблема при чтении из 1С xls файла через ADO. суть проблемы: в файле 6 колонок. первые 5 колонок имеют числовой формат и они нормально считываются, а вот последняя имеет формат дата и при считывании через ADO значение в колонке null. пробовал следующие виды подключений:

Connection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + СокрЛП(СписокНоменклатуры) + ";Extended Properties=""Excel 8.0;HDR=YES""";

"Driver={Microsoft Excel Driver (*.xls)};DBQ=" + СокрЛП(СписокНоменклатуры) + "; DriverID=790; HDR=YES; IMEX=1";

также пробовал менять формат ячеек 6-го столбца на числовой - дохлый номер. добавлял 10 строк в начало и писал в них текст - тоже null. как   еще можно прочитать данные?
1 fisher
 
08.01.14
13:54
Попробуй так еще:
"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + ПараметрыПодключения.ИмяФайла + "; Extended Properties=""Excel 12.0; HDR=NO; IMEX=1;"""
2 fatal_error
 
08.01.14
13:58
(1) Произошла исключительная ситуация (ADODB.Connection): Не удается найти указанный поставщик. Вероятно, он установлен неправильно. - вот такая беда появляется при Connection.Open(). На компе устанавливал AccessDatabaseEngine_x64.exe
3 fisher
 
08.01.14
13:59
Гы :) Там другую хрень устанавливать надо. Ща найду.
4 fisher
 
08.01.14
14:03
Именно вот эту хрень ставить надо:
http://www.microsoft.com/en-us/download/details.aspx?id=23734
5 fatal_error
 
08.01.14
14:04
(4) спасибо, сейчас попробую.
6 fisher
 
08.01.14
14:06
У меня, кстати, так и не получилось под ADO гарантированно получать имена листов в том порядке, в котором они представлены пользователю. Пришлось ради этой чепухи стучаться в эксель напрямую (когда надо). А это долго :(
7 fisher
 
08.01.14
14:11
И от одной неочевидной бяки предостерегу, раскапывая которую пришлось много времени убить: если список листов получаешь через Connection.OpenSchema(adSchemaTables), то при сложном форматировании там могут быть не только листы, но и области листа. А в результате может быть такой замечательный эффект: данные как бы получаешь. Но не всегда все :)
8 fatal_error
 
08.01.14
14:13
(4) спасибо тебе, мил человек. 2 дня убил на загрузку.
(7) имя листа всегда одно и тоже, но приму к сведению.
9 Torquader
 
08.01.14
14:26
(7) Так там как раз области и будут. Просто лист - это стандартная область.
Ещё смертельно для ADO, когда в разных строках в одной колонке разные типы - ADO на этом выдаёт null.
10 fisher
 
08.01.14
14:29
(9) Просто подавляющее большинство сэмплов кода в интернетиках для получения имени первого листа эту особенность не учитывает.
11 Злопчинский
 
08.01.14
14:29
(9) при моем первом попытке поработать с адом - я натолкнулся на простую но поразительную для меня бяку.. строк на единственном листе было тысяч пять, но адо возвращал что-то в районе 4000.. и все! так я плюнул и не юзаю адо... слава богу что не нужно...
12 fisher
 
08.01.14
14:31
(11) Если имя листа определялось в коде, а не задавалось тобой фиксированно, то ты почти гарантированно натолкнулся на описанную мной бяку.
13 Злопчинский
 
08.01.14
19:32
(12) хз.. областей никаких не было вроде.. простой линейный списоктаблица
14 fisher
 
08.01.14
19:41
(13) Вот я на таком же и споткнулся. Магазины присылали заявки вроде как в одном и том же шаблоне. Никаких визуальных отличий. Но из файлов пары магазинов вычитывалась только часть строк. Стал копать и докопался до (7). Х.з. почему там эти области появились. Может, пользователи где-то неловкое движение мышкой сделали :) Визуально тоже никаких областей и простейший формат.
Независимо от того, куда вы едете — это в гору и против ветра!