c# - Excel Interop - 效率和性能

标签 c# excel performance interop vsto

我想知道我可以做些什么来提高 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/

相关文章:

Java Enhanced-For-Loop 比传统更快?

python - 根据时间对 pandas DataFrame 进行子集化

c# - 获取 selenium 下拉框中当前选定的选项

excel - 获取表格列 Excel VBA 的范围(或值)

excel - 如何使用vba将工作表复制到另一个工作簿?

VBA 查找和读取多个范围

python - 列表理解方法优化

c# - MEF + 插件未更新

c# - 专门针对旧版本的单个 .NET Standard API/命名空间(Entity Framework Core)

c# - 哪个 .Net 组件应该用于 tcp/ip 套接字通信?