Вот код загрузки/выгрузки в 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));
}
Общее время - 58-60 сек. Время загрузки в Excel 35 сек.
PS М-да. Попробовал на другой машине. Общее время - 38 сек. Время загрузки в Excel 23 сек.
Дохлый у меня комп дома