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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.09.2020, 10:43   #1  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
Преобразовать HTML в Эксель в пакетной обработке в AX 2012
Привет всем!
AX 2012 R3.
Есть потребность преобразовать файл HTML в Excel, и чтобы это работало в пакетной обработке.
Я использую OpenXML для этих целей. Без пакетной обработки все работает (в том числе в CIL), но в пакетной обработке выскакивает ошибка "Object must implement IConvertible."

Ругается на параметр fileFormat при вызове функции workbook._SaveAs
X++:
    #Excel
    
    Microsoft.Office.Interop.Excel._Application     excel;
    Microsoft.Office.Interop.Excel.Workbooks        workbooks;
    Microsoft.Office.Interop.Excel._Workbook        workbook;
    Microsoft.Office.Interop.Excel.Worksheet        worksheet;
    System.Globalization.CultureInfo                oldCI;
    System.Threading.Thread                         currentThread;
    System.Object                                   missing = URTDotNetExcelDocument::getMissingCLRObject();
    Microsoft.Office.Interop.Excel.XlFileFormat     fileFormat;    
    
    FileName                                        xlsFileName;

    new InteropPermission(InteropKind::ClrInterop).assert();
    excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
    workbooks  = excel.get_Workbooks();

    try
    {
        workbook    = workbooks._Open(_filename,
                                missing,
                                missing,
                                missing,
                                missing,
                                missing,
                                missing,
                                missing,
                                missing,
                                missing,
                                missing,
                                missing,
                                missing);

        xlsFileName = strReplace(_fileName, ".html", ".xls");
        con         = str2con_RU(xlsFileName, "\\");

        excel.set_DisplayAlerts(false);
        fileFormat  = Microsoft.Office.Interop.Excel.XlFileFormat::xlExcel8;
        workbook._SaveAs(xlsFileName,
                        fileFormat, //56,
                        missing,
                        missing,
                        missing,
                        missing,
                        missing,
                        missing,
                        missing,
                        missing,
                        missing
                        //,missing
                        );
    }
    catch (Exception::CLRError)
    {
        error(AifUtil::getClrErrorMessage());
    }
}
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/
Старый 28.09.2020, 10:46   #2  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
Есть ли какой-либо нормальный способ преобразования HTML в Эксель в пакетной обработке ? Может быть, запустить какой-нибудь сприпт на сервере (bat-файл, Power Shell, VB скрипт и т.д.) ?
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/
Старый 28.09.2020, 10:49   #3  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
Если я поменяю параметр fileFormat на missing, то все работает, файл сохраняется с расширением xls, но внутри содержит HTML. А мне надо, чтобы был формат Excel.
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/
Старый 28.09.2020, 11:21   #4  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,158 / 1286 (47) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
А если просто вместо значения перечисления указать число? В 2009 с числом работает и в пакете (хотя, возмодно в 2012 пакетный сервер может работать и по другому).
Ну и у меня там 51, а не 56.
PS: ну и речь, наверное идет не про OpenXML, а про Interop.Excel.

Последний раз редактировалось Raven Melancholic; 28.09.2020 в 11:24.
Старый 28.09.2020, 11:28   #5  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
Да, я пробовал указать число - ошибка та же в пакете.
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/
Старый 28.09.2020, 11:36   #6  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
PS: ну и речь, наверное идет не про OpenXML, а про Interop.Excel.
Да, точно.
Просто я судорожно перебираю все технологии, которые возможны. Пока затык. Тратишь несколько часов, чтобы переделать на другую технологию, и в самом конце всегда затык
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/
Старый 28.09.2020, 11:42   #7  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
Замена параметра на константу 51 не помогла, та же ошибка "Object must implement IConvertible."
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/
Старый 28.09.2020, 12:01   #8  
Pandasama is offline
Pandasama
Участник
 
448 / 133 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
ИМХО, если работает просто так - но не работает в пакете, то вероятно проблема где-то в различиях клиент/сервер или CIL/не CIL

совпадают ли версии используемых библиотек на сервере и в клиенте?
совпадают ли версии экселя?

ну и, как боцманский вариант, наверно, можно написать на чистом .NET эксешник, который будет через эти же библиотеки делать те же действия, а потом в пакете просто вызывать этот экзешник передавая ему нужные параметры в командной строке?
Старый 28.09.2020, 15:12   #9  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
Заработало!
В 7-м параметре вместо слова missing надо было написать магическое заклинание Microsoft.Office.Interop.Excel.XlSaveAsAccessMode::xlNoChange,
Вот так:
X++:
workbook._SaveAs(xlsFileName,
                        fileFormat, //56,
                        missing,
                        missing,
                        missing,
                        missing,
                        Microsoft.Office.Interop.Excel.XlSaveAsAccessMode::xlNoChange,
                        missing,
                        missing,
                        missing,
                        missing
                        //,missing
                        );
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/

Последний раз редактировалось Ace of Database; 28.09.2020 в 15:18.
За это сообщение автора поблагодарили: AlGol (2), sukhanchik (2), Logger (3).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
stephenmann: Technical History of Dynamics AX - From Axapta 3.0 to AX2012 Blog bot DAX Blogs 5 03.03.2017 10:22
emeadaxsupport: Translated User Help on TechNet and downloadable New Features lists available! Blog bot DAX Blogs 0 31.01.2013 05:11
amer-ax: It was a great day! Blog bot DAX Blogs 3 29.12.2012 01:02
Sample Design Patterns: Book Give-away: 'Microsoft Dynamics AX 2012 Development Cookbook' Blog bot DAX Blogs 1 12.05.2012 16:55
dynamics-ax: Interview with Microsoft's Lachlan Cash on his new role, AX 2012 and more Blog bot DAX Blogs 6 22.04.2011 14:55
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 05:11.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.