|
|
#1 |
|
Участник
|
Преобразовать 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/ |
|
|
|
|
#2 |
|
Участник
|
Есть ли какой-либо нормальный способ преобразования HTML в Эксель в пакетной обработке ? Может быть, запустить какой-нибудь сприпт на сервере (bat-файл, Power Shell, VB скрипт и т.д.) ?
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/ |
|
|
|
|
#3 |
|
Участник
|
Если я поменяю параметр fileFormat на missing, то все работает, файл сохраняется с расширением xls, но внутри содержит HTML. А мне надо, чтобы был формат Excel.
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/ |
|
|
|
|
#4 |
|
Участник
|
А если просто вместо значения перечисления указать число? В 2009 с числом работает и в пакете (хотя, возмодно в 2012 пакетный сервер может работать и по другому).
Ну и у меня там 51, а не 56. PS: ну и речь, наверное идет не про OpenXML, а про Interop.Excel. Последний раз редактировалось Raven Melancholic; 28.09.2020 в 11:24. |
|
|
|
|
#5 |
|
Участник
|
Да, я пробовал указать число - ошибка та же в пакете.
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/ |
|
|
|
|
#6 |
|
Участник
|
Цитата:
Просто я судорожно перебираю все технологии, которые возможны. Пока затык. Тратишь несколько часов, чтобы переделать на другую технологию, и в самом конце всегда затык
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/ |
|
|
|
|
#7 |
|
Участник
|
Замена параметра на константу 51 не помогла, та же ошибка "Object must implement IConvertible."
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/ |
|
|
|
|
#8 |
|
Участник
|
ИМХО, если работает просто так - но не работает в пакете, то вероятно проблема где-то в различиях клиент/сервер или CIL/не CIL
совпадают ли версии используемых библиотек на сервере и в клиенте? совпадают ли версии экселя? ну и, как боцманский вариант, наверно, можно написать на чистом .NET эксешник, который будет через эти же библиотеки делать те же действия, а потом в пакете просто вызывать этот экзешник передавая ему нужные параметры в командной строке? |
|
|
|
|
#9 |
|
Участник
|
Заработало!
В 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). | |
|
|
|