我想知道如何才能提高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存储的数据类型(文本或数字)非常重要,因为当您从对象数组转换回该类型时,它不会自动为您执行此操作。如果您无法事先确定数据类型,则可以根据需要添加测试以验证数据。