zoukankan      html  css  js  c++  java
  • DataSet 导出到 xls文件

    找到的 DataSet 导出 Excel 的代码, 效率之高令人侧目, 导出6W行的一个Excel竟然只要20s(亲测,不过数据不同速度应该不同)

    代码存根:

            public static void ExportToExcel(DataSet dataSet, string outputPath)
    {
    // Create the Excel Application object
    ApplicationClass excelApp = new ApplicationClass();

    // Create a new Excel Workbook
    Workbook excelWorkbook = excelApp.Workbooks.Add(Type.Missing);

    int sheetIndex = 0;

    // Copy each DataTable
    foreach (System.Data.DataTable dt in dataSet.Tables)
    {

    // Copy the DataTable to an object array
    object[,] rawData = new object[dt.Rows.Count + 1, dt.Columns.Count];

    // Copy the column names to the first row of the object array
    for (int col = 0; col < dt.Columns.Count; col++)
    {
    // 在这里可以把标题的名字改掉
    rawData[0, col] = dt.Columns[col].ColumnName;
    }

    // Copy the values to the object array
    for (int col = 0; col < dt.Columns.Count; col++)
    {
    for (int row = 0; row < dt.Rows.Count; row++)
    {
    rawData[row + 1, col] = "'" + dt.Rows[row].ItemArray[col];
    }
    }

    // Calculate the final column letter
    string finalColLetter = string.Empty;
    string colCharset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    int colCharsetLen = colCharset.Length;

    if (dt.Columns.Count > colCharsetLen)
    {
    finalColLetter = colCharset.Substring(
    (dt.Columns.Count - 1) / colCharsetLen - 1, 1);
    }

    finalColLetter += colCharset.Substring(
    (dt.Columns.Count - 1) % colCharsetLen, 1);

    // Create a new Sheet
    Worksheet excelSheet = (Worksheet)excelWorkbook.Sheets.Add(
    excelWorkbook.Sheets.get_Item(++sheetIndex),
    Type.Missing, 1, XlSheetType.xlWorksheet);

    excelSheet.Name = dt.TableName;

    // Fast data export to Excel
    string excelRange = string.Format("A1:{0}{1}",
    finalColLetter, dt.Rows.Count + 1);

    excelSheet.get_Range(excelRange, Type.Missing).Value2 = rawData;

    // Mark the first row as BOLD
    ((Range)excelSheet.Rows[1, Type.Missing]).Font.Bold = true;
    }

    // Save and Close the Workbook
    excelWorkbook.SaveAs(outputPath, XlFileFormat.xlWorkbookNormal, Type.Missing,
    Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlExclusive,
    Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
    excelWorkbook.Close(true, Type.Missing, Type.Missing);
    excelWorkbook = null;

    // Release the Application object
    excelApp.Quit();
    excelApp = null;

    // Collect the unreferenced objects
    GC.Collect();
    GC.WaitForPendingFinalizers();

    }



  • 相关阅读:
    vue 组件复用不刷新
    ES6删除对象中的某个元素
    UI组件--element-ui--Table组件自定义合计行
    UI组件--element-ui合计行在横向滚动条下面的解决方法
    java笔记 -- 数组
    java笔记 -- 输入输出
    java笔记 -- java字符串
    java笔记 -- 数学函数与常量
    java笔记 -- java运算
    java笔记 -- java变量与常量的声明
  • 原文地址:https://www.cnblogs.com/willin/p/2332069.html
Copyright © 2011-2022 走看看