2014年9月26日 星期五

[NPOI 2.0] ASP.NET 輸出 Excel 2007

http://tw.gigacircle.com/794887-1

原文為本人撰寫 -- [NPOI 2.0] ASP.NET 輸出 Excel (.xlsx檔 2007格式) -- ASP.NET Export to Excel (.xlsx)
http://www.dotblogs.com.tw/mis2000lab/archive/2014/07/02/npoi-20-for-aspnet_20140703.aspx


NPOI 升級成 2.0 囉 
檔案下載 -- https://npoi.codeplex.com/releases
下載後,請把 .DLL檔案(共計五個),在Visual Studio的網站或專案中,加入參考


實作過程中,因為原廠找不到範例,
特別感謝前輩的分享:
Bobby -- http://smlboby.blogspot.tw/2013/07/npoi-20.html 很有用!謝謝~


只要記住一點,就能初步升級
命名空間 or 程式內,有HSSF字樣,就是產生 Excel 2003(含)以前的格式, .xls檔案
修正為 XSSF即可產生 .xlsx檔(Excel 2007(含)後續新版本的檔案)

上一版(1.2.4版的寫法大多可以沿用),請您放心

1. 命名空間。請自己加入
//-- 自己寫的(宣告)--
using System.IO; //-- FileStream會用到這個命名空間

//===============================
// NPOI 2.0的命名空間與 .DLL檔案(加入參考) ----
// HSSF(Excel 2003), XSSF(Excel 2007), XWPF(Word 2007)。 
//using NPOI.HSSF.UserModel; //-- HSSF 用來產生Excel 2003檔案(.xls)
using NPOI.XSSF.UserModel; //-- XSSF 用來產生Excel 2007檔案(.xlsx)

using NPOI.SS.UserModel; //-- v.1.2.4起 新增的。
//===============================


2. 後置程式碼
//命名空間。using NPOI.XSSF.UserModel; 
IWorkbook workbook = new XSSFWorkbook(); //-- XSSF 用來產生Excel 2007檔案(.xlsx)


//== 新增試算表。===================================
//== 生成一個空白的 Excel 檔案,並且添加三個指定名稱的試算表 Sheet

//-- XSSF 用來產生Excel 2007檔案(.xlsx)

// 方法一: 感謝 Bobby前輩的範例 
XSSFSheet u_sheet = (XSSFSheet)workbook.CreateSheet("My Sheet_20方法一");

// 方法二: v.1.2.4版起的寫法 ( NPOI 2.0可運作)
//== 新增試算表 Sheet名稱。使用 NPOI.SS.UserModel命名空間。
//ISheet u_sheet = (ISheet)workbook.CreateSheet("My Sheet_20方法二");

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

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

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



3. 常見的錯誤

如果您採用了 NPOI 2.0的寫法(使用到 XSSF)
但您產生的副檔名,仍是舊版 .xls

程式可以正常執行,但打開 Excel檔,裡面卻是 HTML原始碼,而非您想輸出的資料!

只要把上面程式的最後一段,輸出的 Excel副檔名改成 .xlsx即可!


VB + C# 兩種範例都有
範例下載:[NPOI 2.0] ASP.NET 輸出 Excel (.xlsx檔 2007格式) -- ASP.NET Export to Excel (.xlsx)
http://www.dotblogs.com.tw/mis2000lab/archive/2014/07/02/npoi-20-for-aspnet_20140703.aspx


Ref:
http://blog.xuite.net/sugopili/computerblog/66186028-NPOI+2.0



沒有留言: