我想知道如何才能提高Excel自动化的性能,因为如果工作表中有很多事情要做,这可能会很慢。

这是我发现的几个:

  • ExcelApp.ScreenUpdating = false-关闭屏幕重绘
  • ExcelApp.Calculation = Excel.XlCalculation.xlCalculationManual-关闭计算引擎,以便当单元格值更改时Excel不会自动重新计算(完成后将其重新打开)
  • 减少对Worksheet.Cells.Item(row, col)Worksheet.Range的调用-我不得不轮询数百个单元以找到所需的单元。实现单元位置的某些缓存,将执行时间从〜40秒减少到〜5秒。

  • 哪种互操作电话会严重损害性能,应该避免使用?您还可以做什么以避免不必要的处理?

    最佳答案

    当使用C#或VB.Net获取或设置范围时,找出范围的总大小是多少,然后获得一个大的二维对象数组...

    //get values
    object[,] objectArray = shtName.get_Range("A1:Z100").Value2;
    iFace = Convert.ToInt32(objectArray[1,1]);
    
    //set values
    object[,] objectArray = new object[3,1] {{"A"}{"B"}{"C"}};
    rngName.Value2 = objectArray;
    

    请注意,了解Excel存储的数据类型(文本或数字)非常重要,因为当您从对象数组转换回该类型时,它不会自动为您执行此操作。如果您无法事先确定数据类型,则可以根据需要添加测试以验证数据。

    07-24 20:33