将DataSet拖放到工作表中的最快方法

一个有16000 x 12条目的higeisch数据集需要被转储到工作表中。

我现在使用下面的函数:

for (int r = 0; r < dt.Rows.Count; ++r) { for (int c = 0; c < dt.Columns.Count; ++c) { worksheet.Cells[c + 1][r + 1] = dt.Rows[r][c].ToString(); } } 

我把这个例子给了中间的一块


这是我读完Dave Zych的build议后实施的。 这很好。

  private static void AppendWorkSheet(Excel.Workbook workbook, DataSet data, String tableName) { Excel.Worksheet worksheet; if (UsedSheets == 0) worksheet = workbook.Worksheets[1]; else worksheet = workbook.Worksheets.Add(); UsedSheets++; DataTable dt = data.Tables[0]; var valuesArray = new object[dt.Rows.Count, dt.Columns.Count]; for (int r = 0; r < dt.Rows.Count; ++r) { for (int c = 0; c < dt.Columns.Count; ++c) { valuesArray[r, c] = dt.Rows[r][c].ToString(); } } Excel.Range c1 = (Excel.Range)worksheet.Cells[1, 1]; Excel.Range c2 = (Excel.Range)worksheet.Cells[dt.Rows.Count, dt.Columns.Count]; Excel.Range range = worksheet.get_Range(c1, c2); range.Cells.Value2 = valuesArray; worksheet.Name = tableName; } 

DataSet构build一个二维数组值,然后可以在Excel中将值的范围设置为数组值。

 object valuesArray = new object[dataTable.Rows.Count, dataTable.Columns.Count]; for(int i = 0; i < dt.Rows.Count; i++) { //If you know the number of columns you have, you can specify them this way //Otherwise use an inner for loop on columns valuesArray[i, 0] = dt.Rows[i]["ColumnName"].ToString(); valuesArray[i, 1] = dt.Rows[i]["ColumnName2"].ToString(); ... } //Calculate the second column value by the number of columns in your dataset //"O" is just an example in this case //Also note: Excel is 1 based index var sheetRange = worksheet.get_Range("A2:O2", string.Format("A{0}:O{0}", dt.Rows.Count + 1)); sheetRange.Cells.Value2 = valuesArray; 

这比循环和单独设置每个单元要快得多。 如果你要单独设置每个单元格,则必须通过COM(对于每个单元格来说缺less一个更好的短语)与Excel进行通信(在你的情况下,这是一个大约192,000次),这非常慢。 循环,build立你的数组,只有与Excel交谈一次删除了大部分的开销。