NPOI导出excel web输出及输出到文件

    公司突然用到大数据量的导出问题,之前写的导出excel的方法有点儿shit,经过查资料,找到了NPOI导出excel的高效方法并分享给大家,希望大家共同进步。

     1.//从datereader(也可以使用datatable) 读取数据添加到excel工作簿,然后转换到内存流  

//从datereader(也可以使用datatable) 读取数据添加到excel工作簿,然后转换到内存流
  1. public static MemoryStream RenderToExcel(IDataReader reader)  
  2. {  
  3.     MemoryStream ms = new MemoryStream();  
  4.    
  5.     using (reader)  
  6.     {  
  7.         using (IWorkbook workbook = new HSSFWorkbook())  
  8.         {  
  9.             using (ISheet sheet = workbook.CreateSheet())  
  10.             {  
  11.                 IRow headerRow = sheet.CreateRow(0);  
  12.                 int cellCount = reader.FieldCount;  
  13.    
  14.                 // handling header.   
  15.                 for (int i = 0; i < cellCount; i++)  
  16.                 {  
  17.                     headerRow.CreateCell(i).SetCellValue(reader.GetName(i));  
  18.                 }  
  19.    
  20.                 // handling value.   
  21.                 int rowIndex = 1;  
  22.                 while (reader.Read())  
  23.                 {  
  24.                     IRow dataRow = sheet.CreateRow(rowIndex);  
  25.    
  26.                     for (int i = 0; i < cellCount; i++)  
  27.                     {  
  28.                         dataRow.CreateCell(i).SetCellValue(reader[i].ToString());  
  29.                     }  
  30.    
  31.                     rowIndex++;  
  32.                 }  
  33.    
  34.                 workbook.Write(ms);  
  35.                 ms.Flush();  
  36.                 ms.Position = 0;  
  37.             }  
  38.         }  
  39.     }  
  40.     return ms;  
  41. }  
public static MemoryStream RenderToExcel(IDataReader reader)
{
    MemoryStream ms = new MemoryStream();
 
    using (reader)
    {
        using (IWorkbook workbook = new HSSFWorkbook())
        {
            using (ISheet sheet = workbook.CreateSheet())
            {
                IRow headerRow = sheet.CreateRow(0);
                int cellCount = reader.FieldCount;
 
                // handling header.
                for (int i = 0; i < cellCount; i++)
                {
                    headerRow.CreateCell(i).SetCellValue(reader.GetName(i));
                }
 
                // handling value.
                int rowIndex = 1;
                while (reader.Read())
                {
                    IRow dataRow = sheet.CreateRow(rowIndex);
 
                    for (int i = 0; i < cellCount; i++)
                    {
                        dataRow.CreateCell(i).SetCellValue(reader[i].ToString());
                    }
 
                    rowIndex++;
                }
 
                workbook.Write(ms);
                ms.Flush();
                ms.Position = 0;
            }
        }
    }
    return ms;
}

 

//将内存流保存到文件

  1. static void SaveToFile(MemoryStream ms, string fileName)  
  2. {  
  3.     using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write))  
  4.     {  
  5.         byte[] data = ms.ToArray();  
  6.    
  7.         fs.Write(data, 0, data.Length);  
  8.         fs.Flush();  
  9.    
  10.         data = null;  
  11.     }  
  12. }  
static void SaveToFile(MemoryStream ms, string fileName)
{
    using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write))
    {
        byte[] data = ms.ToArray();
 
        fs.Write(data, 0, data.Length);
        fs.Flush();
 
        data = null;
    }
}
  1. //将内存流输出为下载文件  
//将内存流输出为下载文件
static void RenderToBrowser(MemoryStream ms, HttpContext context, string fileName)  
  1. {  
  2.     if (context.Request.Browser.Browser == "IE")  
  3.         fileName = HttpUtility.UrlEncode(fileName);  
  4.     context.Response.AddHeader("Content-Disposition""attachment;fileName=" + fileName);  
  5.     context.Response.BinaryWrite(ms.ToArray());  
  6. }  

 

转自:http://blog.csdn.net/zhouqinghe24/article/details/8649346

posted @ 2013-07-03 11:23  IT_菜鸟  阅读(797)  评论(0编辑  收藏  举报