1

需要将具有 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的建议后实施的。这很好用。

    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;
    }
4

1 回答 1

5

从您的值构建一个二维数组DataSet,然后您可以在 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 与 Excel 对话(因为缺少更好的短语)每个单元格(在您的情况下约为 192,000 次),这非常慢。循环、构建您的数组并且只与 Excel 对话一次可以消除大部分开销。

于 2012-11-01T19:40:48.450 回答