書上光碟有附很多範例,如果真要買這方面的書,蠻推薦這本的@@
這是使用NPOI1.2.4版來匯出EXCEL(其他版本可能不適用)
所以一開始得先抓一下NPOI的Library
點我下載 NPOI 1.2.4 Library
抓完後再專案那右鍵->加入參考
//== NPOI的宣告 ==================
using NPOI.HSSF.UserModel;
using NPOI.HPSF;
using NPOI.POIFS.FileSystem;
using NPOI.SS.UserModel;
//===============================
//== 本範例的資料來源:http://msdn.microsoft.com/zh-tw/ee818993.aspx
//== http://tonyqus.sinaapp.com/archives/73 (v.1.2.4版)
HSSFWorkbook workbook = new HSSFWorkbook();
//=======================================(v.1.2.4版)
//== 新增試算表 Sheet名稱。使用 NPOI.SS.UserModel命名空間。
ISheet u_sheet = (ISheet)workbook.CreateSheet("My Sheet_124");
//=======================================
//===============================================(主要功能start)
//== 利用迴圈,把gridview的資料 一個一個 寫入 Excel各個儲存格裡面。
for (int a = 0 ; a < GridView1.Rows.Count ; a++) // gridview的row
{
//**** 先建好一列(Row),才能去作格子(Cell)
IRow u_Row = u_sheet.CreateRow(a+1);
for (int i = 0; i < GridView1.Rows[a].Cells.Count; i++) //gridview的column
{
//== .CreateCell() 可設定為同一列(Row)的 [第幾個格子]
u_Row.CreateCell(i).SetCellValue(GridView1.Rows[a].Cells[i].Text);
}
}
//===============================================(主要功能end)
MemoryStream ms = new MemoryStream(); //==需要 System.IO命名空間
workbook.Write(ms);
//== Excel檔名,請寫在最後面 filename的地方
Response.AddHeader("Content-Disposition", "attachment; filename=申請書.xls");
Response.BinaryWrite(ms.ToArray());
//== 釋放資源
workbook = null; //== VB為 Nothing
ms.Close();
ms.Dispose();
//== 如果要寫在 Web Server的硬碟裡面,請參閱上一個範例 NPOI_01_new_v124.aspx。
}
// 最後面這邊補上單一欄位新增的方式
//**** CreateRow()方法,只有這一列的「第一格子」可以這樣用。(v.1.2.4版 的新變化)
// 每一列的第0個值
u_sheet.CreateRow(0).CreateCell(0).SetCellValue("0000"); // 第0列 第0欄
u_sheet.CreateRow(1).CreateCell(0).SetCellValue("1111"); // 第1列 第0欄
//== 以下在 (v.1.2.1版,正常) 在 目前這個版本會異常
//u_sheet.CreateRow(6).CreateCell(1).SetCellValue("6666"); // 第6列 第1欄
//u_sheet.CreateRow(6).CreateCell(2).SetCellValue("7777");
//== 如果要「讀取」某個格子,請用 .GetCell(index)方法
//**********************************************************(start)
//**** v.1.2.4版在此有很大的改變!!!請看 http://tonyqus.sinaapp.com/archives/73
IRow u_Row= u_sheet.CreateRow(6); //== 先用 IRow介面,建立全新的一列。 第6列
//== .CreateCell() 可設定為同一列(Row)的 [第幾個格子]
u_Row.CreateCell(1).SetCellValue("6666"); // 第6列 第1欄 新增 6666
u_Row.CreateCell(2).SetCellValue("7777"); // 第6列 第2欄 新增 7777
這邊再分享一個匯出時可以去除girdview裡面的 "& nbsp;" 以及新增第一行欄位名稱
protected void Button1_Click(object sender, EventArgs e)
{
// 去除girdview裡面的 " "
for (int i = 0; i < GridView1.Rows.Count; i++)
{
for (int j = 0; j < GridView1.Rows[i].Cells.Count; j++)
{
if (GridView1.Rows[i].Cells[j].Text == " ")
{
GridView1.Rows[i].Cells[j].Text = "";
}
}
}
//== 本範例的資料來源:http://msdn.microsoft.com/zh-tw/ee818993.aspx
//== http://tonyqus.sinaapp.com/archives/73 (v.1.2.4版)
HSSFWorkbook workbook = new HSSFWorkbook();
//=======================================(v.1.2.4版)
//== 新增試算表 Sheet名稱。使用 NPOI.SS.UserModel命名空間。
ISheet u_sheet = (ISheet)workbook.CreateSheet("My Sheet_124");
//=======================================
//===============================================(start)
//== 利用迴圈,把資料寫入 Excel各個儲存格裡面。
for (int a = -1 ; a < GridView1.Rows.Count ; a++) // +1個 欄位名稱的 row
{
//**** 先建好一列(Row),才能去作格子(Cell)
IRow u_Row = u_sheet.CreateRow(a+1);
if (a == -1) //第 0 列要顯示欄位名稱
{
// 第0列新增欄位名稱
u_Row.CreateCell(0).SetCellValue("項目號碼"); // 第0欄
u_Row.CreateCell(1).SetCellValue("檢修品名稱"); // 第1欄
u_Row.CreateCell(2).SetCellValue("規格");
u_Row.CreateCell(3).SetCellValue("數量");
u_Row.CreateCell(4).SetCellValue("單位");
u_Row.CreateCell(5).SetCellValue("試驗項目");
u_Row.CreateCell(6).SetCellValue("良");
u_Row.CreateCell(7).SetCellValue("不良");
u_Row.CreateCell(8).SetCellValue("備註");
}
else
{
for (int i = 0; i < GridView1.Rows[a].Cells.Count; i++)
{
//== .CreateCell() 可設定為同一列(Row)的 [第幾個格子]
u_Row.CreateCell(i).SetCellValue(GridView1.Rows[a].Cells[i].Text);
}
}
}
//===============================================(end)
MemoryStream ms = new MemoryStream(); //==需要 System.IO命名空間
workbook.Write(ms);
//== Excel檔名,請寫在最後面 filename的地方
Response.AddHeader("Content-Disposition", "attachment; filename=材料課委試報告書.xls");
Response.BinaryWrite(ms.ToArray());
//== 釋放資源
workbook = null; //== VB為 Nothing
ms.Close();
ms.Dispose();
//== 如果要寫在 Web Server的硬碟裡面,請參閱上一個範例 NPOI_01_new_v124.aspx。
}

沒有留言:
張貼留言