我寫了一個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