Импорт из Excel через ADO. Не всё вычитывает :( #675368


#0 by fisher
Юзаю строку подключения ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ПараметрыПодключения.ИмяФайла + "; Extended Properties=""Excel 12.0; HDR=NO;"""; Вычитываю запросом "SELECT * FROM [" + ИмяЛиста + "]" И всё какбэ работает... Но попадаются иногда файлы содержанием вроде накладной - шапка и табличная часть, которые таким макаром вычитываются без шапки. Другие нормально. Один из файлов вообще шамански читается - только строка заголовков табличной части, а если перед этим его открыть в екселе - то полностью... Сталкивался ли кто с подобным и получилось ли победить? Если да, то как?
#1 by shuhard
сталкивались как ни странно помогает открытие файлика через апликэйшен и сохранение в старых форматах ну и да, ADODB не универсален
#2 by fisher
Фигово... Пробовал и провайдера Microsoft.Jet.OLEDB.4.0; Extended Properties="Excel 8.0", такая же фигня...
#3 by shuhard
угу бывает универсального рецепта нет
#4 by Ёпрст
вот с таким подключением попробуй еще
#5 by zladenuw
а может такой механизм использовать ?
#6 by shuhard
LockType = 3;] ну уж это не причем
#7 by fisher
Пересохранение в разных форматах не лечит. Видать какая-то особенность именно этого файла. Если тупо первую строчку удалить (там тоже текст какой-то), то все ОК. Пробовал Может, есть что-то хитрое еще в Extended Properties? Где надыбать полный список ентих пропертей? Навскидку не гуглится...
#8 by fisher
Завтра еще пару раз апну и в архив... Пичалька...
#9 by Ёпрст
у меня вот че записано в какой-то поделке (не моё) //1-я строка не читается при 'HDR=Yes' (так и задумано)
#10 by shuhard
[ Если тупо первую строчку удалить (там тоже текст какой-то), то все ОК. ] тогда понятно ADODB по первым 8 строкам тип определяет
#11 by fisher
В идеале нужна бы опция, позволяющая отключить скайнет и тупо вычитать данные всего листа "как есть".
#12 by shuhard
я бы взял сразу деньгами
#13 by fisher
Разобрался. Может, у тебя такая же фигня. Короче, имена листов для обращения по ним в запросе я получал через Connection.OpenSchema(adSchemaTables). А оказалось, что там могут быть не только листы. Вставленные таблицы, фильтрованные области тоже туда попадают. Т.е. в проблемных файлах получалось так, что я обращался не листу целиком, а к какой-то его области. Единственный способ выкупить именно имена листов, который я нашел - это знак "$" в конце имени. Причем надо учесть, что имя листа может быть в одинарных ковычках. Теперь полет вроде нормальный.
#14 by fisher
В итоге плюнул и сделал вычитывание имен листов через Excel.Application. Бо SchemaTables возвращает их в неправильном порядке.
#15 by fisher
+ Но оказалось, что это долго... Оставил загрузку списка листов через ADO, и только если их больше одного - через Excel.Application.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

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