|
|
#11 |
|
Участник
|
Несколько предложений по исследованию Gustav различных вариантов использования ComExcelDocument_RU
1. При создании нового файла Excel использован код X++: excel.newFile("", true, -1); Первый (самый простой) вариант - открывать в невидимом режиме и показывать после выгрузки всех данных. Второй вариант - запретить перед экспортом пользовательский ввод и обновления в открытой книге. X++: COM app;
;
...
app = doc.Application();
app.Interactive(False); // запрет пользовательского ввода
app.ScreenUpdating(False); // запрет обновления окна при изменении данных
...
app.Interactive(True);
app.ScreenUpdating(True); . Значительное увеличение времени в первом варианте присходит из-за реализации метода findRange(), используемого в insertValue(). Если заменить этот код на более простой (часть кода взята из второго варианта)X++: COM doc;
COM actSheet;
COM range;
...
doc = excel.getComDocument();
actSheet = doc.ActiveSheet();
...
while ()
{
...
range = actSheet.range(ComExcelDocument_RU::numToNameCell( 1, row));
range.Value2(ledgerTrans.RecId);
range = actSheet.range(ComExcelDocument_RU::numToNameCell( 2, row));
range.Value2(ledgerTrans.AccountNum);
...3. Окончательная реабилитация Range . Третий вариант с использованием только интерфейсов - вставка при помощи массивов X++: COM actSheet;
COM range;
Array arr;
...
while ()
{
...
arr = new Array(Types::String);
arr.value( 1, strfmt("%1", ledgerTrans.RecId));
arr.value( 2, strfmt("%1", ledgerTrans.AccountNum));
arr.value( 3, strfmt("%1", ledgerTable.AccountName));
arr.value( 4, strfmt("%1", ledgerTable.AccountPlType));
arr.value( 5, strfmt("%1", ledgerTrans.BondBatchTrans_RU));
arr.value( 6, strfmt("%1", ledgerTrans.BondBatch_RU));
arr.value( 7, strfmt("%1", ledgerTrans.TransDate));
arr.value( 8, strfmt("%1", ledgerTrans.Txt));
arr.value( 9, strfmt("%1", ledgerTrans.AmountMST));
arr.value(10, strfmt("%1", ledgerTrans.Crediting));
range = actSheet.range(strfmt("A%1:J%1", row));
range.value2(COMVariant::createFromArray(arr));PS. Упс. Ошибка. Так делать нельзя. X++: excel.insertValue(range, ledgerTrans.AccountNum); X++: excel.insertValueInRange(range, ledgerTrans.AccountNum); X++: range.Value2(ledgerTrans.AccountNum);
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 15.06.2006 в 09:24. |
|
|
|
| За это сообщение автора поблагодарили: belugin (11). | |
| Теги |
| benchmark, download, excel, faq, xml, законченный пример, производительность, экспорт/импорт |
|
|
|