代码之家  ›  专栏  ›  技术社区  ›  zgorawski

提高创建Excel工作表的速度(编程)

  •  1
  • zgorawski  · 技术社区  · 15 年前

    我需要通过Web系统在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 回复  |  直到 15 年前
        1
  •  2
  •   Rolfi    15 年前

    首先定义对象[,]的数组。不管有多大,你都不会再看到延时了。顺便说一句,数组还可以保存公式。

    例如,我在项目中使用的类似此函数:

        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;
        }
    
        2
  •  0
  •   Community Mohan Dere    8 年前

    您可以尝试禁用重新计算,看看这是否有帮助

    Application.Calculation = xlCalculationManual
    
    Application.Calculation = xlCalculationAutomatic
    

    除此之外,这个页面还有几个好的技巧可以从Excel中挤出尽可能多的性能。

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

    推荐文章