|
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). Х.з. почему там эти области появились. Может, пользователи где-то неловкое движение мышкой сделали :) Визуально тоже никаких областей и простейший формат.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |