在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囉…
單純筆記,皆為非正規作法,旁門左道,胡搞瞎搞。