日期:2014-05-17  浏览次数:20462 次

ASP.NET DATASET 导出到excel速度很慢
现在要把数据从dataset导出到excel 测试数据1W条,如果只导出小部分的话 速度还能接受,但是全部导出的话,
十几分钟倒不出来。网上虽然有导出的比较快的方法,但是导出的是伪excle文件,不能导入的。下面是我用的代码,也是网上找的:
C# code

        string excelName ="\\"+ DateTime.Now.ToString("yyyyMMddhhmmss") + ".xls";
        string path = Server.MapPath("upfiles") + excelName;
        Excel.Application excel = new Excel.Application();  //Execl的操作类
        //读取保存目标的对象
        Excel.Workbook bookDest = (Excel.WorkbookClass)excel.Workbooks.Add(Missing.Value);
        Excel.Worksheet sheetDest = bookDest.Worksheets.Add(Missing.Value, Missing.Value, Missing.Value, Missing.Value) as Excel.Worksheet;//给工作薄添加一个Sheet   
        sheetDest.Rows.RowHeight = 20;

        sheetDest.Name = strSheetName;

        int rowIndex = 1;
        int colIndex = 0;

        excel.Application.Workbooks.Add(true);

        foreach (DataColumn col in dt.Columns)
        {
            colIndex++;
            sheetDest.Cells[1, colIndex] = col.ColumnName;
        }

        //导入数据行
        foreach (DataRow row in dt.Rows)
        {
            rowIndex++;
            colIndex = 0;
            foreach (DataColumn col in dt.Columns)
            {
                colIndex++;
                sheetDest.Cells[rowIndex, colIndex] = row[col.ColumnName].ToString();
                
            }
        }
        bookDest.Saved = true;
        bookDest.SaveCopyAs(path);

        excel.Quit();
        excel = null;

        GC.Collect();




麻烦给位提点建议,有代码更好,速度别太慢就行。


------解决方案--------------------
没办法,除非你很清楚excel的数据结构,用流写入
------解决方案--------------------
用多线程导吧 !

一个线程负责1000条!

------解决方案--------------------
试试 NPOI或aspose.cells
------解决方案--------------------
可能得用aspose.cells等组件。
------解决方案--------------------
分批吧
------解决方案--------------------
DataTable就这速度了,如果要速度好的,数据库有个自带的导出的功能,可以用sql语句实现.
------解决方案--------------------
我们在程序中能做的只能是优化查询及导出.