从 C# Interop 加载项更新部分 Excel 工作表的快速方法
Fast Way to Update part of Excel worksheet from C# Interop Add In
我正在尝试找到一种快速更新 Excel 电子表格(C# Interop)的方法。这是一个 Excel 加载项,工作表在完全填充后将有大约 20000 行。我目前的流程如下:
- 我订阅了一项活动服务
- 当我收到第一个事件时,我会处理世界状况,在其中填充数组并快速填充电子表格。这需要几秒钟才能完成,但性能很好。同时,我用一个键和一个包含 Excel 地址和单元格值的 class 填充字典。
我收到的后续事件应该被视为updates/inserts。这意味着我需要遍历我的字典并查看发生了什么变化(这已经足够快了)。缓慢的部分是下面的代码,我在其中循环获取 Excel 范围并更新更改后的值:
Globals.MyAddIn.Application.ScreenUpdating = false;
XL.Range add1 = activeWorksheet.get_Range(xlDataPoint.ExcelAddress);
xlDataPoint.Value = value.ToString();
add1.Value2 = value;
Globals.MyAddIn.Application.ScreenUpdating = true;
由于一些单元格发生变化而其他单元格没有变化 - 我只想更新那些值发生变化的单元格。我还需要使工作表响应用户。
我可以做些什么来加快电子表格的更新速度(我怀疑 VBA 或 C# 中的答案是相同的。)?
我可以看到三种提高速度的方法。首先 - 遵循 Tim Williams 的建议并将 ScreenUpdating 调用移到循环之外。其次 - 如果您的单元格是序列,请使用 Range.Value 属性:
一次为所有单元格赋值
object[,] example = new object[2,2] { {1, 2}, { 3, 4}};
activeWorksheet.Range[activeWorksheet.Cells[1,1], activeWorksheet.Cells[2,2]].Value = example;
另一种方式,如果多个单元格中的值相同,使用Application.Union函数将多个单元格作为一个范围并一次赋值。
我正在尝试找到一种快速更新 Excel 电子表格(C# Interop)的方法。这是一个 Excel 加载项,工作表在完全填充后将有大约 20000 行。我目前的流程如下:
- 我订阅了一项活动服务
- 当我收到第一个事件时,我会处理世界状况,在其中填充数组并快速填充电子表格。这需要几秒钟才能完成,但性能很好。同时,我用一个键和一个包含 Excel 地址和单元格值的 class 填充字典。
我收到的后续事件应该被视为updates/inserts。这意味着我需要遍历我的字典并查看发生了什么变化(这已经足够快了)。缓慢的部分是下面的代码,我在其中循环获取 Excel 范围并更新更改后的值:
Globals.MyAddIn.Application.ScreenUpdating = false; XL.Range add1 = activeWorksheet.get_Range(xlDataPoint.ExcelAddress); xlDataPoint.Value = value.ToString(); add1.Value2 = value; Globals.MyAddIn.Application.ScreenUpdating = true;
由于一些单元格发生变化而其他单元格没有变化 - 我只想更新那些值发生变化的单元格。我还需要使工作表响应用户。 我可以做些什么来加快电子表格的更新速度(我怀疑 VBA 或 C# 中的答案是相同的。)?
我可以看到三种提高速度的方法。首先 - 遵循 Tim Williams 的建议并将 ScreenUpdating 调用移到循环之外。其次 - 如果您的单元格是序列,请使用 Range.Value 属性:
一次为所有单元格赋值object[,] example = new object[2,2] { {1, 2}, { 3, 4}};
activeWorksheet.Range[activeWorksheet.Cells[1,1], activeWorksheet.Cells[2,2]].Value = example;
另一种方式,如果多个单元格中的值相同,使用Application.Union函数将多个单元格作为一个范围并一次赋值。