ADODB + xls #693868


#0 by fatal_error
Добрый день, возникла проблема при чтении из 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 by fisher
Попробуй так еще: "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + ПараметрыПодключения.ИмяФайла + "; Extended Properties=""Excel 12.0; HDR=NO; IMEX=1;"""
#2 by fatal_error
Произошла исключительная ситуация (ADODB.Connection): Не удается найти указанный поставщик. Вероятно, он установлен неправильно. - вот такая беда появляется при Connection.Open. На компе устанавливал AccessDatabaseEngine_x64.exe
#3 by fisher
Гы :) Там другую хрень устанавливать надо. Ща найду.
#4 by fisher
Именно вот эту хрень ставить надо:
#5 by fatal_error
спасибо, сейчас попробую.
#6 by fisher
У меня, кстати, так и не получилось под ADO гарантированно получать имена листов в том порядке, в котором они представлены пользователю. Пришлось ради этой чепухи стучаться в эксель напрямую (когда надо). А это долго :(
#7 by fisher
И от одной неочевидной бяки предостерегу, раскапывая которую пришлось много времени убить: если список листов получаешь через Connection.OpenSchema(adSchemaTables), то при сложном форматировании там могут быть не только листы, но и области листа. А в результате может быть такой замечательный эффект: данные как бы получаешь. Но не всегда все :)
#8 by fatal_error
спасибо тебе, мил человек. 2 дня убил на загрузку. имя листа всегда одно и тоже, но приму к сведению.
#9 by Torquader
Так там как раз области и будут. Просто лист - это стандартная область. Ещё смертельно для ADO, когда в разных строках в одной колонке разные типы - ADO на этом выдаёт null.
#10 by fisher
Просто подавляющее большинство сэмплов кода в интернетиках для получения имени первого листа эту особенность не учитывает.
#11 by Злопчинский
при моем первом попытке поработать с адом - я натолкнулся на простую но поразительную для меня бяку.. строк на единственном листе было тысяч пять, но адо возвращал что-то в районе 4000.. и все! так я плюнул и не юзаю адо... слава богу что не нужно...
#12 by fisher
Если имя листа определялось в коде, а не задавалось тобой фиксированно, то ты почти гарантированно натолкнулся на описанную мной бяку.
#13 by Злопчинский
хз.. областей никаких не было вроде.. простой линейный списоктаблица
#14 by fisher
Вот я на таком же и споткнулся. Магазины присылали заявки вроде как в одном и том же шаблоне. Никаких визуальных отличий. Но из файлов пары магазинов вычитывалась только часть строк. Стал копать и докопался до . Х.з. почему там эти области появились. Может, пользователи где-то неловкое движение мышкой сделали :) Визуально тоже никаких областей и простейший формат.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С