使用Office Interop将单元格写入Excel的最快方法?

dav*_*gan 14 vb.net com excel performance office-interop

我正在编写一个函数,使用VB .NET中的Office Interop将数据导出到Excel.我目前正在使用Excel工作表的Cells()方法直接编写单元格:

worksheet.Cells(rowIndex, colIndex) = data(rowIndex)(colIndex)
Run Code Online (Sandbox Code Playgroud)

这需要很长时间才能获得大量数据.是否有更快的方法可以立即将大量数据写入Excel?用范围做事会更快吗?

Mat*_*ias 29

如果可以的话,你应该避免逐个单元地读写.使用数组并一次读取或写入整个块更快.我在使用C#从工作表中读取了一段时间后写了一篇文章; 基本上,相同的代码以相反的方式工作(见下文),并且运行得更快,尤其是对于更大的数据块.

  var sheet = (Worksheet)Application.ActiveSheet;
  var range = sheet.get_Range("A1", "B2");
  var data = new string[3,3];
  data[0, 0] = "A1";
  data[0, 1] = "B1";
  data[1, 0] = "A2";
  data[1, 1] = "B2";
  range.Value2 = data;
Run Code Online (Sandbox Code Playgroud)


Tom*_*mmy 10

如果您还没有,请确保Application.ScreenUpdating = false在开始输出数据之前进行设置.这将使事情变得更快.完成输出数据后,将其设置为True.必须重新绘制每个单元格上的屏幕需要花费大量时间,绕过此节省了这一点.

至于使用范围,您仍然需要将1(一)个特定单元格作为值,因此我认为这里没有任何好处.我不知道这样做比你在实际输出数据方面做得更快.


pot*_*ngs 5

只是为了补充Tommy的答案.

  • 在开始编写之前,您可能还希望将计算设置为手动.

Application.Calculation = xlCalculationManual

完成写作后,将其设置为自动.(如果原始模式可能不是自动模式,则必须在将其设置为手动之前存储该值)

Application.Calculation = xlCalculationAutomatic

  • 您还可以使用Range对象的CopyFromRecordset方法.

http://msdn.microsoft.com/de-de/library/microsoft.office.interop.excel.range.copyfromrecordset(office.11​​).aspx