我写了一个VSTO DLL来对用户指定的单元格范围执行转换。我在下面的方式这样做:VSTO速度问题
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)是否更快?任何猜测多少?
我不得不猜测你正在线程上运行此代码以防止UI冻结。在这种情况下,你穿过公寓边界访问这些单元,这很慢。不禁用自动单元格计算也使其非常慢。 – 2012-07-23 14:57:38
没有线程,界面或多或少冻结长时间运行。尽管没有计算的单元格(它是一个名称和地址列表),我会尝试禁用自动单元格计算。 – 2012-07-23 15:32:05