1.前言:
NPOI是Apache License 2.0的開放原始碼函式庫,提供.NET程式開發人員在無安裝Microsoft Office的環境下,讀取和操作Office 97-2007文件。
2.說明:
POI是支援JAVA的函式庫,而NPOI是支援.NET的開放原始碼,用以讀取xls, doc, ppt等檔案,在無安裝Microsoft Office的伺服器或是個人電腦上,可提供操作Office文件。
NPOI的特點:
開放的原始碼函式庫。
涵蓋大部分的Excel功能。
支援Office 97-2007的格式,例如xls, xlsx, docx。
支援輸出與輸入的功能。
支援.NET 4.0。
豐富的範例說明。
名詞說明:
HSSF - 提供讀寫Microsoft Excel XLS格式檔案的功能。
XSSF - 提供讀寫Microsoft Excel OOXML XLSX格式檔案的功能。
HWPF - 提供讀寫Microsoft Word DOC格式檔案的功能。
HSLF - 提供讀寫Microsoft PowerPoint格式檔案的功能。
HDGF - 提供讀Microsoft Visio格式檔案的功能。
HPBF - 提供讀Microsoft Publisher格式檔案的功能。
HSMF - 提供讀Microsoft Outlook格式檔案的功能。
有關POI的說明可參考:
http://en.wikipedia.org/wiki/Apache_POI
NPOI軟體下載網址:
http://npoi.codeplex.com/
本範例使用版本為npoi 2.0.1 (beta1)
軟體解壓縮後,將\npoi 2.0.1 (beta1)\npoi\dotnet3.5的DLL檔複製到自己專案的bin目錄下
加入參考: NPOI.dll, NPOI.OOXML.dll
加入命名空間:
using NPOI; using NPOI.HSSF.UserModel; using NPOI.XSSF.UserModel; using NPOI.SS.UserModel;
程式碼:
//範例一,簡單產生Excel檔案的方法 private void CreateExcelFile() { //建立Excel 2003檔案 IWorkbook wb = new HSSFWorkbook(); ISheet ws = wb.CreateSheet("Class"); ////建立Excel 2007檔案 //IWorkbook wb = new XSSFWorkbook(); //ISheet ws = wb.CreateSheet("Class"); ws.CreateRow(0);//第一行為欄位名稱 ws.GetRow(0).CreateCell(0).SetCellValue("name"); ws.GetRow(0).CreateCell(1).SetCellValue("score"); ws.CreateRow(1);//第二行之後為資料 ws.GetRow(1).CreateCell(0).SetCellValue("abey"); ws.GetRow(1).CreateCell(1).SetCellValue(85); ws.CreateRow(2); ws.GetRow(2).CreateCell(0).SetCellValue("tina"); ws.GetRow(2).CreateCell(1).SetCellValue(82); ws.CreateRow(3); ws.GetRow(3).CreateCell(0).SetCellValue("boi"); ws.GetRow(3).CreateCell(1).SetCellValue(84); ws.CreateRow(4); ws.GetRow(4).CreateCell(0).SetCellValue("hebe"); ws.GetRow(4).CreateCell(1).SetCellValue(86); ws.CreateRow(5); ws.GetRow(5).CreateCell(0).SetCellValue("paul"); ws.GetRow(5).CreateCell(1).SetCellValue(82); FileStream file = new FileStream(@"d:\tmp\npoi.xls", FileMode.Create);//產生檔案 wb.Write(file); file.Close(); } //範例二,DataTable轉成Excel檔案的方法 private void DataTableToExcelFile(DataTable dt) { //建立Excel 2003檔案 IWorkbook wb = new HSSFWorkbook(); ISheet ws; ////建立Excel 2007檔案 //IWorkbook wb = new XSSFWorkbook(); //ISheet ws; if (dt.TableName != string.Empty) { ws = wb.CreateSheet(dt.TableName); } else { ws = wb.CreateSheet("Sheet1"); } ws.CreateRow(0);//第一行為欄位名稱 for (int i = 0; i < dt.Columns.Count; i++) { ws.GetRow(0).CreateCell(i).SetCellValue(dt.Columns[i].ColumnName); } for (int i = 0; i < dt.Rows.Count; i++) { ws.CreateRow(i + 1); for (int j = 0; j < dt.Columns.Count; j++) { ws.GetRow(i+1).CreateCell(j).SetCellValue(dt.Rows[i][j].ToString()); } } FileStream file = new FileStream(@"d:\tmp\npoi.xls", FileMode.Create);//產生檔案 wb.Write(file); file.Close(); }
留言列表