[源碼分享]NPOI導出數據到EXCEl(輸出文件,web輸出下載)

//從datereader(也可以使用datatable) 讀取數據添加到excel工作簿,然後轉換到內存流
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;
}

 

//將內存流保存到文件

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


 

//將內存流輸出爲下載文件
static void RenderToBrowser(MemoryStream ms, HttpContext context, string fileName)
{
    if (context.Request.Browser.Browser == "IE")
        fileName = HttpUtility.UrlEncode(fileName);
    context.Response.AddHeader("Content-Disposition", "attachment;fileName=" + fileName);
    context.Response.BinaryWrite(ms.ToArray());
}



 

發佈了54 篇原創文章 · 獲贊 84 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章