12.08.2011, 15:22 | #61 |
Участник
|
а у меня не заработало, все исправления, которые есть использовал, всё равно не хочет нормально работать
использовал вот этот job X++: static void CorrectADOFileImport(Args _args) { ExcelImportADO excel; Counter fieldCount; Counter curField; FileNameOpen fileName; COM adoxCatalog = new COM(@"ADOX.Catalog"); COM Tables; COM Table; COM Columns; COM Column; int i; ; filename = WinAPI::getOpenFileName(infolog.hWnd(), ["Microsoft Excel","*.xls"], '', "Выберите файл"); if (!filename) throw error("@SYS26757"); excel = new ExcelImportADO(fileName); if (excel.openFile()) { fieldCount = excel.getFieldsCount(); adoxCatalog.ActiveConnection(excel.getConnection()); Tables = adoxCatalog.Tables(); Table = Tables.Item(0); if (Table) { Columns = Table.Columns(); for (i=0;i<Columns.Count();i++) { Column = Columns.Item(i); if (Column) info(Column.Name()); } box::info(int2str(fieldCount)); while (!excel.eof()) { info(excel.getFieldValue(1, true)); info(excel.getFieldValue(2, true)); info(excel.getFieldValue(3, true)); info(excel.getFieldValue(4, true)); info(excel.getFieldValue(5, true)); for (curField = 6; curField < fieldCount; curField++) { info(excel.getFieldValue(curField, true)); } return; //только первую строку //excel.moveNext(); } } } } пробегая дебаггером заметил, что он даже не читает его, вылетая вот с этой ошибкой Цитата:
Метод "Open" в COM-объекте класса "ADODB.Recordset" возвратил код ошибки 0x80004005 (E_FAIL), который означает: Недопустимое имя '0$'. Проверьте, что оно не содержит недопустимые символы или знаки препинания, а также не является слишком длинным.
p.s. dax 2009, строка в declaration "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + %1 + ";Extended Properties='Excel 8.0;HDR=No;FirstRowHasNames=0;IMEX=1'" p.p.s. а так хочется использовать этот класс для того, чтобы записывать данные в таблицы через классы Ax типа AxInventTable и им подобные хочу сам немного доработать этот класс, чтобы в первой ячейка например указывалась таблица, в которую вставлялись поля, а дальше список полей во второй строке, после чего строчки с данными. Думаю тогда импорт через стандартные группы определений Excel сам собой бы отпал с его низкой скоростью. Последний раз редактировалось niksen; 12.08.2011 в 16:48. |
|
16.08.2011, 08:22 | #62 |
Участник
|
неужели ни у кого нет этого класса в своих проектах...?
|
|
16.08.2011, 09:56 | #63 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: niksen (1). |
16.08.2011, 13:03 | #64 |
Участник
|
Цитата:
лучше расскажите: = какой версией excel пользуетесь. = файл какой версии загружаете. = содержатся ли макросы в файле = включена ли защита от макросов в экселе см. также обсуждение про xlsx в этой ветке. вопрос: ответ 1 и ответ 2. |
|
16.08.2011, 13:32 | #65 |
Участник
|
1)версия excel 2010 64хбитная, пробовал менять строку провайдера для версии офиса, в разных комбинациях класс всегда выдавал ошибку.
2)файл загружаю xls, пробовал и xlsx с разными комбинациями офиса и 2007 и 2010 и 2003 3)макросов в файле нет 4)защита от макросов выключена |
|
16.08.2011, 14:57 | #66 |
Участник
|
Цитата:
можете выложить файл, который не испортируется и ваш код - постараемся провериьт. файл лучше не с реальными данными, а с сильно урезанными и случайными. но обязательно чтобы у вас импорт не работал. Хинт: у вас внутри файла нигде объединения ячеек нет? |
|
16.08.2011, 15:54 | #67 |
Участник
|
вот кстати объединение ячеек есть в моём файле...
а рабочий класс - это в приложении к первому сообщению темы? там вроде Цитата:
Последний раз редактировалось gl00mie; 21.01.2007 в 21:20.
|
|
16.08.2011, 18:07 | #68 |
Участник
|
Цитата:
Сообщение от niksen
а у меня не заработало, все исправления, которые есть использовал, всё равно не хочет нормально работать
(...) вместе с файлом импорт.xls, который выложил propeller. пробегая дебаггером заметил, что он даже не читает его, вылетая вот с этой ошибкой Цитата:
Метод "Open" в COM-объекте класса "ADODB.Recordset" возвратил код ошибки 0x80004005 (E_FAIL), который означает: Недопустимое имя '0$'. Проверьте, что оно не содержит недопустимые символы или знаки препинания, а также не является слишком длинным.
Последний раз редактировалось Владимир Максимов; 16.08.2011 в 18:26. |
|
|
За это сообщение автора поблагодарили: niksen (1). |
16.08.2011, 19:13 | #69 |
Moderator
|
|
|
|
За это сообщение автора поблагодарили: mazzy (2). |
16.08.2011, 21:40 | #70 |
Участник
|
ADO вроде не переваривает объединение ячеек.
выкладывайте свой файл. сделайте какой-нибудь с левыми данными, но на котором вы получаете такую-же ошибку. лучше не создавайте новый файл, а замените в вашем файле нормальные данные абракадаброй. попробуйте удалять данные дихотомией пока не останется несколько строк, на которых ошибка все еще проявляется. и давайте посмотрим. |
|
25.09.2013, 07:23 | #71 |
Enjoy!
|
Приветствую коллеги. Подскажите где взять эту компоненту, или примерно как инсталлятор называется (долго искал не нашел)
|
|
15.04.2014, 14:41 | #72 |
MCITP
|
День добрый!
Столкнулись с такой проблемой. Есть файл Excel. Работаем с файлом используя предложенный класс. Есть ячейка. Формат общий. Ячейка содержит штрих-код. При обращении из ADO получаем значение данной ячейки вида "4.607E+12", а хотелось бы получать нормальное значение "4607002420100". Кто-нибудь решал подобную задачу? Спасибо! |
|
15.04.2014, 16:34 | #73 |
Ищущий знания...
|
Цитата:
Сообщение от GBH
День добрый!
Столкнулись с такой проблемой. Есть файл Excel. Работаем с файлом используя предложенный класс. Есть ячейка. Формат общий. Ячейка содержит штрих-код. При обращении из ADO получаем значение данной ячейки вида "4.607E+12", а хотелось бы получать нормальное значение "4607002420100". Кто-нибудь решал подобную задачу? Спасибо!
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
15.04.2014, 17:15 | #74 |
MCITP
|
Спасибо за ответ!
Возможно я не правильно выразился. Я имел в виду обрабатывать поступившую строку в коде. Т.е. понятно, что можно обработать данный столбец до импорта(поставить апостроф в начале строки) и нормально загружать, но можно ли что-то сделать без предварительной обработки? Или предварительная обработка обязательна и другого выхода нет. |
|
15.04.2014, 18:09 | #75 |
Участник
|
А в чем собственно проблема
X++: ExcelImportADO excel; ; excel = new ExcelImportADO(@"C:\1.xlsx"); if (excel.openFile()) { info(excel.getFieldValue(1, true)); } |
|
|
За это сообщение автора поблагодарили: GBH (1). |
16.04.2014, 11:47 | #76 |
MCITP
|
Цитата:
Продолжили заниматься проблемой и выяснили такую закономерность - у нас заголовок файла содержит объеденные ячейки, если удалить заголовок с объеденными ячейками, то значение, действительно, считывается верно. Всем спасибо за ответы! |
|
|
За это сообщение автора поблагодарили: gl00mie (1), S.Kuskov (1). |
04.04.2017, 18:12 | #77 |
Участник
|
установлен excel 2013
ошибка: X++: Format of the initialization string does not conform to the OLE DB specification. X++: "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + %1 + ";Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1" список провайдеров |
|
04.04.2017, 18:49 | #78 |
Участник
|
Цитата:
Сообщение от propeller
установлен excel 2013
ошибка: X++: Format of the initialization string does not conform to the OLE DB specification. X++: "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + %1 + ";Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1" список провайдеров X++: "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + %1 + ";Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1'"
__________________
Sergey Nefedov |
|
|
За это сообщение автора поблагодарили: propeller (1). |
05.04.2017, 16:07 | #79 |
Участник
|
да, кавычки не хватало,
Правда после исправления, такая ошибка: X++: Provider cannot be found. It may not be properly installed. требуется ли какая-то настройка драйвера? |
|
07.04.2017, 15:01 | #80 |
Участник
|
А вы компонент Microsoft Access Database Engine 2010 ставили? Вообще вот тут Accessing Excel files on a x64 machine написано про доступ к файлам в 64 битной среде, там нет какой либо информации про доп. настройки.
Попробуйте через другие средства прочитать данные из Excel при помощи этого драйвера, например, через Management Studio.
__________________
Sergey Nefedov |
|