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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.07.2011, 12:45   #1  
GBH is offline
GBH
MCITP
Аватар для GBH
MCP
MCBMSS
Ex AND Project
 
140 / 28 (1) +++
Регистрация: 28.06.2007
обрабатывать xls-файл после того как доступ получен
Всем добрый день!
Ax2009
Kernel 5.0.1500.3761
App 5.0.1500.3761

office 2007

Возможно для вопроса необходимо создать отдельную тему, но решил спросить в текущей.

Есть файл *.xls. Однако при открытии файла непосредственно Excel выскакивает сообщение, что "Действительный формат отличается от указываемого его расширением ".

Если использовать указанную в данной теме строку подключения, то возникает ошибка "Внешняя таблица не имеет предполагаемый формат".

Данная тема - это Вспомогательный класс для импорта из Excel через ADO

Если прописать строку
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + %1 + ";Extended Properties='HTML Import;HDR=YES;IMEX=1'"

То открытие файла происходит корректно ( во всяком случае метод getConnection отрабатывает без ошибок).
Но не могу понять, как обрабатывать файл после того как доступ получен.

Возможно я пошёл не тем путём. :-(

Заранее спасибо за ответы!

Последний раз редактировалось GBH; 26.07.2011 в 13:02.
Старый 26.07.2011, 15:21   #2  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от GBH Посмотреть сообщение
Но не могу понять, как обрабатывать файл после того как доступ получен.
Читать строка за строкой, поле за полем в цикле. Там же в classDeclaration подробнейшим образом в каментах всё расписано:
Цитата:
#// gl00mie, import data from Excel via ADO, 20061220 -->
#// How to use this class:
#// 1. Create class instance, specify filename and (optional) cursor type e.g.
#// doc = new ExcelImportADO(strFilename, #adOpenStatic);
#// 2. Read names of worksheets present in the file, suppress error messages if necessary
#// con = doc.getExcelSheetNames();
#// 3. Specify the name of the worksheet to open ADODB.Recordset on, otherwise the first one will be used
#// doc.excelSheetName(conpeek(con,2));
#// 4. Open the file, i.e. open ADODB.Recordset (and ADODB.Connection if it's not opened yet)
#// suppress error messages if necessary and check for result:
#// if(doc.openFile(false)) ...
#// 5. Check if there is a correct number of columns in the Recordset
#// if(doc.getFieldsCount() > 7) ...
#// 6. Get the total record count if #adOpenStatic cursor type is used
#// cnRecords = doc.getRecordCount();
#// 7. Read records in a loop, use indexes (1..n) or field names to identify fields
#// By default field values are returned as strings
#// int i;
#// real r;
#// str s;
#// while(!doc.eof())
#// {
#// i = doc.getFieldValue(1, false);
#// s = doc.getFieldValue('stringField');
#// r = doc.getFieldValue('numericField', false);
#// doc.moveNext();
#// }
#// 8. Cleanup - close ADODB.Recordset and ADODB.Connection
#// doc.finalize();
Старый 26.07.2011, 15:59   #3  
GBH is offline
GBH
MCITP
Аватар для GBH
MCP
MCBMSS
Ex AND Project
 
140 / 28 (1) +++
Регистрация: 28.06.2007
Спасибо за ответ!

Но у меня сразу же пункт 2 не отработает, листов-то нет, как я понимаю.
Во всяком случае у меня пишет, что листы не найдены.
Старый 26.07.2011, 16:11   #4  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Точно у вас файл - .xls? Не .xlsx? Потому что для .xlsx надо не Jet, а ACE: Вспомогательный класс для импорта из Excel через ADO

Показали бы код что ли...
Старый 26.07.2011, 16:37   #5  
GBH is offline
GBH
MCITP
Аватар для GBH
MCP
MCBMSS
Ex AND Project
 
140 / 28 (1) +++
Регистрация: 28.06.2007
Да, файл *.xls.
Если использовать ACE то валится с ошибкой ещё при получении доступа "Внешняя таблица не имеет предполагаемый формат".

Строка подключения:
X++:
 #localmacro.ADODBExcelConnString
        "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + %1 + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1'" 
        "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + %1 + ";Extended Properties='HTML Import;HDR=YES;IMEX=1'"  
    #endmacro
Если подключаться с первой строкой, то возникает ошибка 1.
Если со второй, то возникает ошибка 2 в методе openFile в строчке
X++:
rstExcel.Open(@"SELECT * FROM [" + strSheetName + @"$]", this.getConnection(), nCursorType);
Миниатюры
Нажмите на изображение для увеличения
Название: Первая строка подключения.JPG
Просмотров: 322
Размер:	60.4 Кб
ID:	7008   Нажмите на изображение для увеличения
Название: Вторая строка подключения.JPG
Просмотров: 377
Размер:	64.0 Кб
ID:	7009  

Старый 26.07.2011, 17:02   #6  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Объект '0$' ? Назвали бы лист как-то посолиднее, хотя бы букву добавьте перед нулем...
Старый 26.07.2011, 17:34   #7  
GBH is offline
GBH
MCITP
Аватар для GBH
MCP
MCBMSS
Ex AND Project
 
140 / 28 (1) +++
Регистрация: 28.06.2007
Лист называется корректно, это так определяется
Поэтому я и считаю, что обращаться к листам тут не получится, а вот как я не знаю.

Штатное открытие данного файла екселем сразу же выдаёт сообщение "Действительный формат отличается от указываемого его расширением " и выскакивет окошко.
После нажатия кнопки "Да", файл открывается, где мы видим нормальное наименование листа.

Но, насколько я понимаю, чтобы корректно открыть данный файл происходит какая-то операция, которая позволяет корректно это сделать и в лоб, первой строкой подключения, данный файл не обработать.
Вторая строка получает доступ к файлу, но работать с листами не получается.

Скорее всего, можно и подключением первой строкой добиться нужного результата, но, к сожалению, я не знаю как(также как и второй строкой подключения обработать файл) .
Поэтому надеюсь на совет в какую сторону копать.
Миниатюры
Нажмите на изображение для увеличения
Название: 123.jpg
Просмотров: 341
Размер:	22.2 Кб
ID:	7010  
Изображения
 
Старый 26.07.2011, 17:53   #8  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А у вас точно файл экселевский?

Может, это обычный текстовый файл с расширением xls?

Попробуйте просмотреть его содержимое обычным редактором или вьювером
__________________
Axapta v.3.0 sp5 kr2
Старый 27.07.2011, 08:23   #9  
GBH is offline
GBH
MCITP
Аватар для GBH
MCP
MCBMSS
Ex AND Project
 
140 / 28 (1) +++
Регистрация: 28.06.2007
Я думаю, что, всё таки, это html с расширением xls.
Поэтому, если посмотреть вторую строку подключения,которая получает доступ к файлу, есть строка
X++:
Extended Properties='HTML Import
Но, опять же, как его обрабатывать я не знаю.
Надеюсь на подсказку.
Миниатюры
Нажмите на изображение для увеличения
Название: 123.jpg
Просмотров: 410
Размер:	37.4 Кб
ID:	7014  
Старый 27.07.2011, 09:33   #10  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А если его переименовать обратно в report.html и попробовать загрузить через ADO?
__________________
Axapta v.3.0 sp5 kr2
Старый 27.07.2011, 09:39   #11  
GBH is offline
GBH
MCITP
Аватар для GBH
MCP
MCBMSS
Ex AND Project
 
140 / 28 (1) +++
Регистрация: 28.06.2007
Ничего не меняется, что ,думаю, логично. Т.к. до расширения ADO всё равно, как я думаю. Что прописано в строке подключения, так он и будет подключаться к файлу.
Старый 27.07.2011, 09:41   #12  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
А если и с другой стороны попробовать - открыть его в Excel и сохранить как настоящий файл Excel при помощи Save As? Этот новый файл будет обрабатываться классом импорта?

P.S. Естественно с ExtendedProperties = Excel...
Старый 27.07.2011, 09:58   #13  
GBH is offline
GBH
MCITP
Аватар для GBH
MCP
MCBMSS
Ex AND Project
 
140 / 28 (1) +++
Регистрация: 28.06.2007
Да, это всё сработает отлично. Т.е. открыть файл, пересохранить его в нормальном формате Excel.
Но задача состоит в том, чтобы не производить данных манипуляций, а обработать файл таким какой он есть. Т.е. файл будет приходить постоянно, а формат его никто менять не будет.
Грубо говоря, необходимо следущее - обработать файл таким какой он есть непосредственно средствами аксапты, чтобы пользователь нажал кнопку, например, "Импорт" и всё.
Возможно, я использую не те инструменты для данной обработки. Поэтому жду советов как это сделать правильнее.
Старый 27.07.2011, 10:09   #14  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Попробуйте добавить в хидер такой тег
X++:
<head>
...
 <title>Report</title>
...
 </head>
и проверьте, будет ли загрузка после этого
__________________
Axapta v.3.0 sp5 kr2
Старый 27.07.2011, 10:31   #15  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от GBH Посмотреть сообщение
Т.е. файл будет приходить постоянно, а формат его никто менять не будет.
Ну, ёлка-палка... Дык, его формат менять не надо. Откройте в Excel, "сохраните как" в Excel, прочитайте новый файл классом gl00mie и удалите новый файл. Всё - конечно, программно, не вручную. И всё незаметно для пользователя.
Старый 27.07.2011, 11:26   #16  
GBH is offline
GBH
MCITP
Аватар для GBH
MCP
MCBMSS
Ex AND Project
 
140 / 28 (1) +++
Регистрация: 28.06.2007
Цитата:
Откройте в Excel, "сохраните как" в Excel....Всё - конечно, программно, не вручную
Нельзя ли пример кода.

Также не понятно одно - если мы откроем его для сохранения, то зачем нам его сохранять. Лучше взять и обработать.
Только не понятно как.
Старый 27.07.2011, 11:27   #17  
GBH is offline
GBH
MCITP
Аватар для GBH
MCP
MCBMSS
Ex AND Project
 
140 / 28 (1) +++
Регистрация: 28.06.2007
Цитата:
Сообщение от AndyD Посмотреть сообщение
Попробуйте добавить в хидер такой тег
X++:
<head>
...
 <title>Report</title>
...
 </head>
и проверьте, будет ли загрузка после этого
Сразу же ругается на не правильный формат файла. :-(
Старый 27.07.2011, 11:46   #18  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Кстати, а картинка - содержимое вашего файла?
Тег META там почему-то не закрыт
По идее, head должен выгядеть так
X++:
<head> <META http-equiv="Content-type" content="text/html; charset=ISO8859-1" /><title>Report</title></head>
PS Хотя, в HTML разрешают его не закрывать
__________________
Axapta v.3.0 sp5 kr2

Последний раз редактировалось AndyD; 27.07.2011 в 11:50.
Старый 27.07.2011, 12:42   #19  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от GBH Посмотреть сообщение
Нельзя ли пример кода.
Запишите макрос в Excel, т.е. в пустом Экселе включите запись макро, далее откройте свой файл, сохраните его как xls, закройте файл, выключите запись макро. Получившийся код VBA несите сюда - я помогу его оформить на X++.

Цитата:
Сообщение от GBH Посмотреть сообщение
Также не понятно одно - если мы откроем его для сохранения, то зачем нам его сохранять. Лучше взять и обработать.
Импорт при помощи ADO работает с СОХРАНЕННЫМ файлом на диске! (этот файл как бы БД для него). К тому же, для несохраненного файла вы не сможете указать параметры строки подключения. Поэтому сохранение обязательно при использовании класса gl00mie.
Старый 27.07.2011, 12:47   #20  
GBH is offline
GBH
MCITP
Аватар для GBH
MCP
MCBMSS
Ex AND Project
 
140 / 28 (1) +++
Регистрация: 28.06.2007
Картинка - содержимое файла.
Спасибо за советы, но это не помогает.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
документооборот и доступ к файлам ivas DAX: Программирование 34 18.05.2012 11:00
SysMailer, отправка PDF, приходит пустой файл ena_ax DAX: Программирование 12 19.11.2010 10:56
Gustav: Unsorted, или Записки DAX-дилетанта - II Gustav DAX Blogs 39 20.05.2009 15:34
Периодически пропадает доступ к Системе у удаленных пользователей andy_555 DAX: Администрирование 4 04.03.2009 15:02
Разрешение на доступ к базе данных nicko DAX: Администрирование 3 18.05.2004 18:49

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

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

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