ExcelDna / NetOffice / Excel:插入值的最有效方法?

我使用ExcelDna和NetOffice为Excel创build插件,并从各种来源获取数据并将其插入到工作表中。

我的问题是在工作表中插入数据非常慢。

将值块插入Excel的最有效方法是什么?

ResultCell[,] result = _currentView.GetResult(values, cursor); int loopM = result.GetUpperBound(0); int loopN = result.GetUpperBound(1); for (int y = 0; y <= loopM; y++) { for (int x = 0; x <= loopN; x++) { int a = xlCurrentCell.Row + row; int b = xlCurrentCell.Column + x; Excel.Range xlCell = (Excel.Range)xlActiveSheet.Cells[a, b]; _SetValue(xlCell, result[y, x]); } row++; } ... private void _SetValue(Excel.Range xlCell, ResultCell cell) { xlCell.ClearFormats(); object value = cell.Value; if (value is ExcelError) { value = ExcelUtils.ToComError((ExcelError) value); } else if (ExcelUtils.IsNullOrEmpty(value)) { value = ""; } xlCell.Value = value; if (!string.IsNullOrEmpty(cell.NumberFormat)) { xlCell.NumberFormat = cell.NumberFormat; } } 

问题是每个插入成为一个屏幕更新? 我试过:

 Excel.Application xlApp = new Excel.Application(null, ExcelDna.Integration.ExcelDnaUtil.Application); xlApp.ScreenUpdating = false; 

但是这没有任何效果。

每个单元的数据设置很慢。 你可以将一个大范围的值设置为一个值的数组,这将是非常快的。

暂时closures屏幕更新和重新计算也将有所帮助。

有关详细的讨论,包括使用Excel-DNA加载项的C API的代码,请参阅实时(未保存的)Excel数据和C#对象之间的最快接口