|
06.03.2013, 15:21 | #1 |
Участник
|
Bega
В данном случае не вчитался и подумал о ком объекте. А раз тут дотНет, то есть еще вот такой момент, в C# после Collect вызывал метод WaitForPendingFinalizers. |
|
06.03.2013, 15:23 | #2 |
Участник
|
|
|
07.03.2013, 16:30 | #3 |
Участник
|
Есть какой-то способ вставки в range массива, как это было возможно с COM?
Вот пример для COM, он работает: X++: ComExcelDocument_RU comExcel; ArrayExtend_RU arrayStr = new ArrayExtend_RU(Types::String, 10); ; comExcel = new ComExcelDocument_RU(); comExcel.newFile("", false); arrayStr = new ArrayExtend_RU(Types::String, 2); arrayStr.value(1, "AAA"); arrayStr.value(2, "БББ"); comExcel.insertValue("A1:B1", arrayStr); comExcel.visible(true); X++: SysExcelApplication_NET sysExcelApplication; SysExcelWorksheet_NET sysExcelWorksheet; SysExcelRange_NET range; ArrayExtend_RU arrayStr = new ArrayExtend_RU(Types::String, 10); ; sysExcelApplication = SysExcelApplication_NET::construct(); sysExcelApplication.workbooks().add(""); sysExcelWorksheet = sysExcelApplication.worksheets().itemFromNum(1); arrayStr = new ArrayExtend_RU(Types::String, 2); arrayStr.value(1, "AAA"); arrayStr.value(2, "БББ"); range = sysExcelWorksheet.range("A1:B1"); range.value2(arrayStr); sysExcelApplication.visible(true); |
|
07.03.2013, 16:46 | #4 |
Участник
|
Нашел способ через System.Array:
X++: SysExcelApplication_NET sysExcelApplication; SysExcelWorksheet_NET sysExcelWorksheet; SysExcelRange_NET range; System.Array array; System.Type type; ; sysExcelApplication = SysExcelApplication_NET::construct(); sysExcelApplication.workbooks().add(""); sysExcelWorksheet = sysExcelApplication.worksheets().itemFromNum(1); type = System.Type::GetType('System.String'); array = System.Array::CreateInstance(type, 2); array.SetValue(CLRInterop::getObjectForAnyType("AAA"), 0); array.SetValue(CLRInterop::getObjectForAnyType("БББ"), 1); range = sysExcelWorksheet.range("A1:B1"); range.value2(array); sysExcelApplication.visible(true); |
|
|
За это сообщение автора поблагодарили: BOAL (2), Pustik (2), Logger (5), IvanS (1). |
21.01.2014, 21:23 | #5 |
Участник
|
Если весь array состоит из System.String, то всё получается корректно. А если в некоторых ячейках числа (переведённые в строковый вид), то они потом экселем всё равно воспринимаются как строки Даже если при этом используется шаблон xlt, в котором у этой ячейки стоит формат данных числовой.
Числа нужно вставлять отдельным массивом с числовым типом ?
__________________
Дмитрий |
|
14.01.2015, 12:02 | #6 |
Участник
|
Если данный код запустить в клиентском режиме - работает, как только переключаю класс в серверный - аксапта вылетает. Причем если вместо array вставлять обычную строку все нормально работает X++: SysExcelApplication_NET sysExcelApplication; SysExcelWorksheet_NET sysExcelWorksheet; SysExcelRange_NET range; System.Array array; System.Type type; ; new InteropPermission( InteropKind::ClrInterop ).assert(); // BP deviation documented sysExcelApplication = SysExcelApplication_NET::construct(); sysExcelApplication.visible(true); sysExcelApplication.workbooks().add(""); sysExcelWorksheet = sysExcelApplication.worksheets().itemFromNum(1); type = System.Type::GetType('System.String'); array = System.Array::CreateInstance(type, 2); array.SetValue(CLRInterop::getObjectForAnyType("AAA"), 0); array.SetValue(CLRInterop::getObjectForAnyType("БББ"), 1); range = sysExcelWorksheet.range("A1:B1"); range.value2(array); // !!!! здесь вылетает Axapta |
|
14.01.2015, 13:33 | #7 |
Участник
|
С какой ошибкой вылетает ? AifUtil::getClrErrorMessage() что говорит ?
Я кстати CLRInterop::getObjectForAnyType("AAA") не использую, вставляю значение (строковое, числовое и т.д.) без конвертирования. Работает и в пакетном и в обычном режиме.
__________________
Дмитрий Последний раз редактировалось Damn; 14.01.2015 в 13:37. |
|
14.01.2015, 14:28 | #8 |
Участник
|
Вылетает с стандартной критической ошибкой (Приложение выполнело недопустимую операцию и будет закрыто, отправить отчет в microsoft или запустить дебагер и т.д.), до catch не доходит. В Событиях операционки ничего не говорящее сообщение
Faulting application name: Ax32.exe, version: 5.0.1600.2596, time stamp: 0x53171f5d Faulting module name: Ax32.exe, version: 5.0.1600.2596, time stamp: 0x53171f5d Exception code: 0xc0000005 Fault offset: 0x001dbf2f Faulting process id: 0x1b78 Faulting application start time: 0x01d02fec081571f8 Faulting application path: C:\Program Files (x86)\Microsoft Dynamics AX\50\Client\Bin\Ax32.exe Faulting module path: C:\Program Files (x86)\Microsoft Dynamics AX\50\Client\Bin\Ax32.exe Report Id: 8818c4b7-9bdf-11e4-80ea-0050569a5ddc Faulting package full name: Faulting package-relative application ID: CLRInterop::getObjectForAnyType - убрал, но ситуацию не спасает (( Procmon.exe - тоже толком ничего не выдает, отказ на доступ к файлам/папкам не заметил. Office 2013. Интересно у кого-нибудь данный код не вышибает Аксапту? Последний раз редактировалось ex3em; 14.01.2015 в 14:36. |
|
Теги |
.net, ax2009, excel, законченный пример, полезное |
|
|