1

我编写了一个 VSTO DLL 来对用户指定的单元格范围执行转换。我正在通过以下方式执行此操作:

Globals.ThisAddIn.Application.EnableEvents = false;

int totRows=inputRange.Rows.Count;
int totCols=inputRange.Columns.Count;

for (int i = 1; i <= totRows; i++) {
  for (int j = 1; j <= totCols; j++) {
    if (((Range)inputRange.Cells[i, j]).Value2 != null) {
      ((Range)outputSheet.Cells[i, j]).Value2 = MyTransform(((Range)inputRange.Cells[i, j]).Value2);
    }
  }
}

Globals.ThisAddIn.Application.EnableEvents = true;

这种方法允许我每小时修改大约 150 万个单元(我没有计算 MyTransform() 消耗的时间),这在我看来非常慢。

是否有更有效的方法来读取/写入 VSTO 中的单元格?

如果没有,将其转换为 XLL(可能使用 Excel-DNA)会更快吗?猜猜多少钱?

4

1 回答 1

4

您正在为正在读取和设置的每个单元格进行多次 COM 调用。一次将整个范围作为数组处理会更有效。

这个问题对选项进行了广泛的讨论:Fastest way to interface between live (unsaved) Excel data and C# objects

使用Excel-DNA和 Excel C API,您可以每秒读取和写入一百万个单元格,但我猜测即使通过 COM,如果您以大数组的形式读取和写入,性能也会非常好。

于 2012-07-23T14:46:40.993 回答