Улучшить скорость создания листов Excel (программно) - PullRequest
1 голос
/ 25 октября 2010

Мне нужно генерировать какие-то отчеты в Excel через веб-систему.Мой текущий код выглядит следующим образом (упрощенно):

//[javascript inside .aspx page]

ExcelApp = new ActiveXObject("Excel.Application");
ExcelSheet = new ActiveXObject("Excel.Sheet");

ExcelSheet.Windows(1).WindowState = 2;
ExcelSheet.Application.Visible = false;

for (i=1; i< [elementNumber]; i++)
{
   ExcelSheet.ActiveSheet.Cells(i,1).Value = myXML.documentElement.childNodes(i).text;
}

ExcelSheet.Application.Visible = true;

Даже если я заполняю только несколько рядов, это займет около 10 секунд.Есть ли способ ускорить этот процесс, например, создать целую таблицу в памяти вместо заполнения ячейка за ячейкой?

Ответы [ 2 ]

2 голосов
/ 28 октября 2010

Сначала определите массив объекта [,].Вы больше не увидите задержку, независимо от того, насколько она велика.Кстати, массив также может содержать формулы.

например что-то вроде этой функции, которую я использую в своем проекте:

    public static void AddValueArrayToSheet(_Worksheet ws, Range rangeTopLeft, object[,] values) {
        Range cellRange = ws.Cells.get_Range(rangeTopLeft, rangeTopLeft[values.GetUpperBound(0) + 1, values.GetUpperBound(1) + 1]);
        cellRange.Value = values;
    }
0 голосов
/ 26 октября 2010

Вы можете попробовать отключить пересчет, чтобы увидеть, поможет ли это

Application.Calculation = xlCalculationManual

Application.Calculation = xlCalculationAutomatic

Кроме этого, на этой странице есть несколько полезных советов, позволяющих максимально увеличить производительность из Excel

http://www.cpearson.com/excel/optimize.htm

...