24.08.2010, 11:31 | #41 |
Administrator
|
Попробуйте "Excel 8.0" заменить на "Excel 12.0 Xml". Не уверен - т.к. нет возможности оперативно проверить
__________________
Возможно сделать все. Вопрос времени |
|
24.08.2010, 11:37 | #42 |
Участник
|
Надо использовать не Jet, а ACE
http://www.microsoft.com/downloads/d...displaylang=en Строка подключения будет выглядеть так X++: "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + %1 + ";Extended Properties='Excel 12.0'"
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: Zabr (6), sukhanchik (6), gl00mie (5). |
24.08.2010, 11:48 | #43 |
Участник
|
Цитата:
Сообщение от AndyD
Надо использовать не Jet, а ACE
http://www.microsoft.com/downloads/d...displaylang=en Строка подключения будет выглядеть так X++: "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + %1 + ";Extended Properties='Excel 12.0'" |
|
24.08.2010, 11:58 | #44 |
Участник
|
Стоп. Поторопился. Работает, но.. как быть вот этими параметрами:
Цитата:
HDR=No;FirstRowHasNames=0;IMEX=1'
Цитата:
Error Сообщение (11:55:05) Метод "Open" в COM-объекте класса "ADODB.Connection" возвратил код ошибки 0x80004005 (E_FAIL), который означает: Невозможно найти устанавливаемый ISAM.
Error Сообщение (11:55:05) Набор таблиц недоступен. Приложение Excel инициализировано? Error Сообщение (11:55:05) Метод "Open" в COM-объекте класса "ADODB.Connection" возвратил код ошибки 0x80004005 (E_FAIL), который означает: Невозможно найти устанавливаемый ISAM. Error Сообщение (11:55:05) Невозможно открыть файл «c:\2007.xlsx» |
|
24.08.2010, 12:07 | #45 |
Участник
|
Вот здесь расписаны параметры подключения к Excel 2007
__________________
Axapta v.3.0 sp5 kr2 |
|
24.08.2010, 13:44 | #46 |
Участник
|
Цитата:
Сообщение от AndyD
Вот здесь расписаны параметры подключения к Excel 2007
Получается, что подключение к Excel 2003 и Excel 2007 делается по-разному. Получается, что для всех функций, загружающих что-либо в Аксапту с помощью класса ExcelImportADO, нужно предусмотреть выбор пользователем формата загружаемого файла Excel. Притом что уровень многих пользователей таков, что они вообще не имеют понятия о каких-то форматах файлов Excel, тем более не смогут их различить хотя бы по расширению файла. Неудобно. |
|
24.08.2010, 19:48 | #47 |
Administrator
|
Ну система-то сможет различить форматы - хотя бы по расширению. И в зависимости от расширения применить соответствующий механизм.
__________________
Возможно сделать все. Вопрос времени |
|
02.09.2010, 02:38 | #48 |
Участник
|
Используя класс ExcelImportADO столкнулся со следущей проблемой - если Excel файл содержит более 65536 строк, то первый вызов функции excelImportADO.eof() возвращает TRUE - что НЕ ВЕРНО, т.к. ещё прохода по строкам не было и соотв. импорт заканчивается не начавшись.
Кто-нибудь сталкивался с подобной проблемой? Заранее спасибо! |
|
02.09.2010, 10:48 | #49 |
Moderator
|
Цитата:
Сообщение от erudit
Используя класс ExcelImportADO столкнулся со следущей проблемой - если Excel файл содержит более 65536 строк, то первый вызов функции excelImportADO.eof() возвращает TRUE - что НЕ ВЕРНО, т.к. ещё прохода по строкам не было и соотв. импорт заканчивается не начавшись.
Кто-нибудь сталкивался с подобной проблемой? X++: #CCADO static void Job333_gl00mieExcelImportADO(Args _args) { ExcelImportADO doc = new ExcelImportADO(@'C:\Test_gl00mie.xlsx', #adOpenStatic); ; doc.openFile(false); while(!doc.eof()) { print doc.getFieldValue(1,false); doc.moveNext(); } } Ну и в Class Declaration класса надо заменить шаблон строки подключения на рекомендацию AndyD'а: А вы openFile не забыли у себя сделать? А то .eof() возвращает true и когда recordset = null. |
|
|
За это сообщение автора поблагодарили: erudit (1). |
02.09.2010, 18:19 | #50 |
Участник
|
Спасибо огромное!
С меня причитается! Буду в Питере, обязательно свяжусь! Заменил строку соединения и всё заработало как аптеке! Ещё раз спасибо за скорую помощь! |
|
04.10.2010, 16:53 | #51 |
Участник
|
Всем доброго времени суток.
Ax3 SP3 Обнаружился непонятный глюк: Все файлы, что пока трогал, грузятся нормально (идёт загрузка из прайсов поставщиков цен во внутреннюю табличку). Кроме одного. В нём столбец цены подгружается без сотых. Везде всегда формат столбца стоял "общий". Изменение формата на "число" не помогало. Вот такой инфолог: X++: info(strFmt("%1",xlImport.getFieldValue(8,false))); info(strFmt("%1",xlImport.getFieldValue(8,true))); info(strFmt("%1",any2real(xlImport.getFieldValue(8,false)))); info(strFmt("%1",any2real(xlImport.getFieldValue(8,true)))); X++: 6713,08 6713,08 6 713,00 6 713,00 X++: SalesDDP = xlImport.getFieldValue(8,false); Есть ли идеи у кого-нибудь? |
|
04.10.2010, 17:59 | #52 |
Участник
|
Похоже, у вас из этих ячеек значение выгружается как строка. А так как для преобразования any2real() десятичный разделитель ожидается точка, то, по-этому, и обрезаются копейки при преобразовании.
Может быть, в файле числа заколочены с апострофом впереди? Тогда будет игнорироваться тип ячейки, а визуально будет как число
__________________
Axapta v.3.0 sp5 kr2 |
|
05.10.2010, 12:25 | #53 |
Участник
|
Спасибо за ответ, правда не помогло насчёт апострофов - в экселе всё стандартно
А про any2real не знал, спасибо! В итоге тупо отбрутфорсил - поменял запятые на точки и any2real |
|
02.02.2011, 16:30 | #54 |
Участник
|
Не знаю, насколько это будет актуально для других, у нас при использовании класса ExcelImportADO (переосмысленного немного) выпадала в своё время ошибка:
Цитата:
Метод 'Open' в COM-объекте класса 'ADODB.Recordset' возвратил код ошибки 0x80004005 (E_FAIL), который означает: Определено слишком много полей.
Может кому съэкономит немного времени. |
|
22.02.2011, 11:33 | #55 |
Участник
|
Возникла такая проблема, при использовании данного класса:
X++: xlImport = new ExcelImportADO(filename); while(!xlImport.eof()) { strItemID = xlImport.getFieldValue(1); strItemAmount = xlImport.getFieldValue(3); ... Если кто-то сталкивался, подскажите как быть, плиз. |
|
02.03.2011, 09:10 | #56 |
Молодой, подающий надежды
|
Небольшой глюк
В методе getExcelSheetNames() помимо названий самих листов в контейнер попадают названия закладок (bookmark), что естественно приводит к ошибке, если закладка попадает в контейнер имен первой. Единственный способ отличить закладку от листа, который я пока нашел, это наличие символа '$' в названии листа. Вопрос: на сколько это корректно?
|
|
07.03.2011, 12:46 | #57 |
Участник
|
Да, есть такое дело... оказывается, я это давно подправил у себя, но так и не выложил исправление на форуме (см. также это сообщение). В getExcelSheetNames() внутри цикла обработки названий таблиц, возвращаемых ADOX.Catalog, достаточно дописать небольшую проверку:
X++: for (i = 0; i < cnSheets; i++) { sheet = sheets.item(i); strSheet = sheet.name(); // если в имени не содержится '$', то это именованный диапазон, а не лист книги if (!strfind(strSheet, '$', 1, maxint())) continue; |
|
21.06.2011, 13:52 | #58 |
Moderator
|
Коллеги, добрый день!
А никто не сталкивался при использовании данного класса импорта со следующей проблемой? DAX 4.0SP2 (ядра пробовал разные), Excel2007. При импорте из файла, если одна из ячеек записи имеет длину более 256 символов, то запись просто пропускается и обрабатывается сразу следующая запись! Т.е. MoveNext() перескакивает запись с длинным полем, молча без какой-либо ошибки.Пробовал использовать Move(), разные типы курсоров, подключался через Jet и ACE, импортировал из 2003го формата - ничего не помогает. Посоветуйте плиз, что можно сделать. Или попробуйте кто-нибудь загрузить файл с ячейкой более 256 символов.
__________________
Андрей. |
|
21.06.2011, 17:02 | #59 |
Молодой, подающий надежды
|
Dax 2009 RU6
MS Office 2007 Строка подключения: Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + _fileName + ";;Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1' Тип курсора: #adOpenForwardOnly 958 бездумнонабранных символов загружает без проблем, как в формате .xls, так и .xlsx Последний раз редактировалось pedrozzz; 21.06.2011 в 17:05. |
|
|
За это сообщение автора поблагодарили: Dron AKA andy (2). |
23.06.2011, 12:28 | #60 |
Moderator
|
Докладываю о результатах экспериментов.
Во-первых, спешу покаяться: в моем конкретном случае нужен был курсор с возможностью предварительного подсчета кол-ва записей, поэтому #adOpenForwardOnly я не проверял Во-вторых, проблема решилась, и виновным оказалось определение типа столбца по первым строкам. Предполагаю, что т.к. в начале стояли короткие строки, то для всего столбца устанавливался укороченный строковый тип. И далее курсор глючил при переборе. Вышеописанная правка параметра в реестре полностью убрала проблему.
__________________
Андрей. |
|