我想知道我可以做些什么来提高 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 存储的数据类型(文本或数字)很重要,因为当您从对象数组转换回类型时,它不会自动为您执行此操作。如果您无法事先确定数据类型,请在必要时添加测试以验证数据。
关于c# - Excel Interop - 效率和性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/356371/