[C#][ASP.NET] NPOI IS ROCK!

在ASP.net上透過NPOI產出Xlsx

最近碰到某些東西需要產Excel的需求

本來我習慣用Office.Interop.Excel來進行相關需求,但有時還真麻煩,

看了網路上許多人的做法,使用了NPOI…我認為整體真的簡潔,直觀許多了

參考神人前輩mis2000lab的文章以及另一位不具名前輩提供的顏色表,在此感謝前輩們無私提供相關資料,成為.NET菜鳥們引路的一盞明燈

依照我預設的需求小小修改一番…

        public void ExportDataTableToExcel(DataTable s_DataTable)
        {
            Response.Clear();
            Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";

            IWorkbook wb = new XSSFWorkbook();

            ISheet ws = wb.CreateSheet("testsheet1");

            XSSFRow row = (XSSFRow)ws.CreateRow(0);
            XSSFCell cel = (XSSFCell)row.CreateCell(5);


            row.CreateCell(0).SetCellValue(Convert.ToString("col1"));
            row.CreateCell(1).SetCellValue(Convert.ToString("col2"));
            row.CreateCell(2).SetCellValue(Convert.ToString("col3"));
            row.CreateCell(3).SetCellValue(Convert.ToString("col4"));
            row.CreateCell(4).SetCellValue(Convert.ToString("col5"));

            XSSFCellStyle oStyle = (XSSFCellStyle)wb.CreateCellStyle();
            oStyle.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.Grey25Percent.Index;
            oStyle.FillPattern = NPOI.SS.UserModel.FillPattern.SolidForeground;//灰色,顏色參考資料http://www.dotblogs.com.tw/lastsecret/archive/2010/12/20/20250.aspx


            for (int i = 0; i < 5; i++)
            {
                ws.GetRow(0).GetCell(i).CellStyle = oStyle;//將標題row指定style
            }

            for (int i = 0; i < s_DataTable.Rows.Count; i++)
            {
                ws.CreateRow(i + 1);

                for (int j = 0; j < s_DataTable.Columns.Count; j++)
                {
                    if (Convert.ToString(s_DataTable.Rows[i][j]) == "")
                    {
                        ws.GetRow(i + 1).CreateCell(j).SetCellValue("0");
                    }
                    else
                    {
                        ws.GetRow(i + 1).CreateCell(j).SetCellValue(s_DataTable.Rows[i][j].ToString());
                    }
                }
            }

            for (int i = 0; i < s_DataTable.Columns.Count; i++)
            {
                ws.AutoSizeColumn(i);
            }

            try
            {
                //== 輸出Excel 2007檔案。==============================
                MemoryStream MS = new MemoryStream();   //==需要 System.IO命名空間
                wb.Write(MS);

                //== Excel檔名,請寫在最後面 filename的地方
                Response.AddHeader("Content-Disposition", "attachment; filename=Workbook_2007.xlsx");
                Response.BinaryWrite(MS.ToArray());

                //== 釋放資源
                wb = null;   //== VB為 Nothing
                MS.Close();
                MS.Dispose();

                Response.Flush();
                Response.End();
            }
            catch (Exception)
            {
                throw;
            }
        }

如此就能產出Xlsx囉…

 

 

單純筆記,皆為非正規作法,旁門左道,胡搞瞎搞。