![]() |
#11 |
Участник
|
Вот код загрузки/выгрузки в Excel - 10 колонок * 50 т. строк
X++: { ComExcelDocument_RU excel = new ComExcelDocument_RU(); Com doc; Com app; Com sheet; Com range; COMVariant var; ComVariant v, v1; Array arr; Container c; int i, j, k; Com SafeArray = new Com ("AxSafeArray.SafeArray"); int rowCount; int colCount; int tm = winapi::getTickCount(); ; v = ComVariant::createNoValue(); v1 = new ComVariant(ComVariantInOut::In, ComVariantType::VT_VARIANT); v1.variant(v); arr = new Array(Types::Class); for (j=1;j<=10;j++) { for (i=1;i<=50000;i++) switch (j mod ((i mod 3)+1)) { case 0: arr.value(i, ComVariant::createFromStr(strfmt("??? %1", i))); break; case 1: arr.value(i, ComVariant::createFromInt(i)); break; case 2: arr.value(i, ComVariant::createFromReal(i)); break; } var = ComVariant::createFromArray(arr); k = SafeArray.AddArrayCol(v1, var); } var = v; excel.newFile("", false); doc = excel.getComDocument(); app = doc.Application(); sheet = app.activeSheet(); range = sheet.range("A1:J50000"); c += [strfmt("%1", winapi::getTickCount()-tm)]; range.value2(var); c += [strfmt("%1", winapi::getTickCount()-tm)]; var = range.value2(); rowCount = SafeArray.GetArrayRowCount(var); colCount = SafeArray.GetArrayColCount(var); c += [strfmt("%1", winapi::getTickCount()-tm)]; for (j=1;j<=colCount;j++) { v1 = SafeArray.GetArrayCol(var, j); arr = v1.safeArray(); for (i=1;i<=rowCount;i++) v = arr.value(i); } excel.visible(true); c += [strfmt("%1", winapi::getTickCount()-tm)]; for (i=1;i<=conlen(c);i++) info(conpeek(c, i)); } PS М-да. Попробовал на другой машине. Общее время - 38 сек. Время загрузки в Excel 23 сек. Дохлый у меня комп дома ![]()
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 11.01.2007 в 08:32. |
|