AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: База знаний и проекты
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.08.2010, 11:31   #41  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,317 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Попробуйте "Excel 8.0" заменить на "Excel 12.0 Xml". Не уверен - т.к. нет возможности оперативно проверить
__________________
Возможно сделать все. Вопрос времени
Старый 24.08.2010, 11:37   #42  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Надо использовать не 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  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Цитата:
Сообщение от 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  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Цитата:
Сообщение от Zabr Посмотреть сообщение
Заработало..
Стоп. Поторопился. Работает, но.. как быть вот этими параметрами:

Цитата:
HDR=No;FirstRowHasNames=0;IMEX=1'
Что такое IMEX=1, я не знаю. А вот HDR=No;FirstRowHasNames=0; мне важны, чтобы файл читался с первой строки, а не со второй. При попытке добавить эти пераметры получаю вот такую ошибку (прр любом формате файла):

Цитата:
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  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Вот здесь расписаны параметры подключения к Excel 2007
__________________
Axapta v.3.0 sp5 kr2
Старый 24.08.2010, 13:44   #46  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Цитата:
Сообщение от AndyD Посмотреть сообщение
Вот здесь расписаны параметры подключения к Excel 2007
Спасибо за ссылку. Ясно.
Получается, что подключение к Excel 2003 и Excel 2007 делается по-разному.
Получается, что для всех функций, загружающих что-либо в Аксапту с помощью класса ExcelImportADO, нужно предусмотреть выбор пользователем формата загружаемого файла Excel. Притом что уровень многих пользователей таков, что они вообще не имеют понятия о каких-то форматах файлов Excel, тем более не смогут их различить хотя бы по расширению файла. Неудобно.
Старый 24.08.2010, 19:48   #47  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,317 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от Zabr Посмотреть сообщение
Притом что уровень многих пользователей таков, что они вообще не имеют понятия о каких-то форматах файлов Excel, тем более не смогут их различить хотя бы по расширению файла. Неудобно.
Ну система-то сможет различить форматы - хотя бы по расширению. И в зависимости от расширения применить соответствующий механизм.
__________________
Возможно сделать все. Вопрос времени
Старый 02.09.2010, 02:38   #48  
erudit is offline
erudit
Участник
 
36 / 52 (2) ++++
Регистрация: 19.03.2003
Адрес: Украина
Используя класс ExcelImportADO столкнулся со следущей проблемой - если Excel файл содержит более 65536 строк, то первый вызов функции excelImportADO.eof() возвращает TRUE - что НЕ ВЕРНО, т.к. ещё прохода по строкам не было и соотв. импорт заканчивается не начавшись.
Кто-нибудь сталкивался с подобной проблемой?

Заранее спасибо!
Старый 02.09.2010, 10:48   #49  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от 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();
    }
}
Всё замечательно отрабатывает. Файл C:\Test_gl00mie.xlsx содержит на первом листе слово Field1 в ячейке A1 и ниже от ячейки A2 до A70000 соответственно числа от 2 до 70 тыщ.

Ну и в Class Declaration класса надо заменить шаблон строки подключения на рекомендацию AndyD'а:
Цитата:
Сообщение от AndyD Посмотреть сообщение
X++:
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + %1 + ";Extended Properties='Excel 12.0'"
А вы openFile не забыли у себя сделать? А то .eof() возвращает true и когда recordset = null.
За это сообщение автора поблагодарили: erudit (1).
Старый 02.09.2010, 18:19   #50  
erudit is offline
erudit
Участник
 
36 / 52 (2) ++++
Регистрация: 19.03.2003
Адрес: Украина
Спасибо огромное!
С меня причитается! Буду в Питере, обязательно свяжусь!
Заменил строку соединения и всё заработало как аптеке!
Ещё раз спасибо за скорую помощь!
Старый 04.10.2010, 16:53   #51  
Helm is offline
Helm
Участник
 
15 / 11 (1) +
Регистрация: 24.09.2009
Всем доброго времени суток.
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
Т.е. независимо от того, как грузить ячейку - строкой или числом - сначала идёт загрузка нормально. А и при any2real и копировании напрямую идёт неудача - переводится с потерей.
X++:
SalesDDP = xlImport.getFieldValue(8,false);
, SalesDDP типа SalesPrice.
Есть ли идеи у кого-нибудь?
Старый 04.10.2010, 17:59   #52  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Похоже, у вас из этих ячеек значение выгружается как строка. А так как для преобразования any2real() десятичный разделитель ожидается точка, то, по-этому, и обрезаются копейки при преобразовании.

Может быть, в файле числа заколочены с апострофом впереди?
Тогда будет игнорироваться тип ячейки, а визуально будет как число
__________________
Axapta v.3.0 sp5 kr2
Старый 05.10.2010, 12:25   #53  
Helm is offline
Helm
Участник
 
15 / 11 (1) +
Регистрация: 24.09.2009
Спасибо за ответ, правда не помогло насчёт апострофов - в экселе всё стандартно
А про any2real не знал, спасибо!
В итоге тупо отбрутфорсил - поменял запятые на точки и any2real
Старый 02.02.2011, 16:30   #54  
Krash is offline
Krash
Участник
Аватар для Krash
 
17 / 15 (1) ++
Регистрация: 23.08.2005
Не знаю, насколько это будет актуально для других, у нас при использовании класса ExcelImportADO (переосмысленного немного) выпадала в своё время ошибка:
Цитата:
Метод 'Open' в COM-объекте класса 'ADODB.Recordset' возвратил код ошибки 0x80004005 (E_FAIL), который означает: Определено слишком много полей.
Проблема оказалась в том, что у исходных файлов некоторые страницы были шириной 256 столбцов (IV). Для лечения достаточно было удалить хотя бы один столбец на подобной странице. Что делать, если лишних столбцов нет, задумался только сейчас.

Может кому съэкономит немного времени.
Старый 22.02.2011, 11:33   #55  
propeller is offline
propeller
Участник
Аватар для propeller
 
359 / 29 (1) +++
Регистрация: 25.07.2007
Возникла такая проблема, при использовании данного класса:
X++:
    xlImport    = new ExcelImportADO(filename);


    while(!xlImport.eof())
    {

        strItemID      = xlImport.getFieldValue(1);
        strItemAmount  = xlImport.getFieldValue(3);
    ...
В excel файле первая колонка должна грузиться как текст. Но если возникает ситуация, когда в 1-9 строчке в этой колонке только цифры (хотя формат текстовый или общий) то все дальнейшие строчки с буквами воспринимаются как "0".
Если кто-то сталкивался, подскажите как быть, плиз.
Вложения
Тип файла: xls импорт.xls (94.0 Кб, 280 просмотров)
Старый 02.03.2011, 09:10   #56  
pedrozzz is offline
pedrozzz
Молодой, подающий надежды
Аватар для pedrozzz
MCBMSS
Лучший по профессии 2015
 
164 / 218 (8) ++++++
Регистрация: 18.02.2010
Адрес: Краснодар
Небольшой глюк
В методе getExcelSheetNames() помимо названий самих листов в контейнер попадают названия закладок (bookmark), что естественно приводит к ошибке, если закладка попадает в контейнер имен первой. Единственный способ отличить закладку от листа, который я пока нашел, это наличие символа '$' в названии листа. Вопрос: на сколько это корректно?
Старый 07.03.2011, 12:46   #57  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Да, есть такое дело... оказывается, я это давно подправил у себя, но так и не выложил исправление на форуме (см. также это сообщение). В 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  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Коллеги, добрый день!

А никто не сталкивался при использовании данного класса импорта со следующей проблемой?

DAX 4.0SP2 (ядра пробовал разные), Excel2007. При импорте из файла, если одна из ячеек записи имеет длину более 256 символов, то запись просто пропускается и обрабатывается сразу следующая запись! Т.е. MoveNext() перескакивает запись с длинным полем, молча без какой-либо ошибки.Пробовал использовать Move(), разные типы курсоров, подключался через Jet и ACE, импортировал из 2003го формата - ничего не помогает.

Посоветуйте плиз, что можно сделать. Или попробуйте кто-нибудь загрузить файл с ячейкой более 256 символов.
__________________
Андрей.
Старый 21.06.2011, 17:02   #59  
pedrozzz is offline
pedrozzz
Молодой, подающий надежды
Аватар для pedrozzz
MCBMSS
Лучший по профессии 2015
 
164 / 218 (8) ++++++
Регистрация: 18.02.2010
Адрес: Краснодар
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  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Докладываю о результатах экспериментов.

Во-первых, спешу покаяться: в моем конкретном случае нужен был курсор с возможностью предварительного подсчета кол-ва записей, поэтому #adOpenForwardOnly я не проверял
Во-вторых, проблема решилась, и виновным оказалось определение типа столбца по первым строкам. Предполагаю, что т.к. в начале стояли короткие строки, то для всего столбца устанавливался укороченный строковый тип. И далее курсор глючил при переборе.

Вышеописанная правка параметра в реестре полностью убрала проблему.
__________________
Андрей.
Теги
ado, download, excel, импорт, полезное, axapta

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
gl00mie: Read Excel table via ADO Blog bot DAX Blogs 2 09.04.2010 08:32
dynamicsusers: DL Tips And Tricks: ADO Database Reader (Jet way) - Excel Example Blog bot DAX Blogs 0 02.08.2007 03:50
casperkamal: Using ADO to read from Excel in Microsoft Dynamics Ax Blog bot DAX Blogs 2 14.05.2007 11:59

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 13:19.