NPOI - Home

https://msdn.microsoft.com/zh-tw/ee818993.aspx

在Server 端存取Excel 檔案的利器:NPOI Library

Codeplex 軟體套件(Package)資訊
套件名稱 NPOI
作者 tonyqus, huseyin, atao
目前版本 1.2.1 Stable(正式版)
URL http://npoi.codeplex.com/
使用難易度
使用此套件時可用的輔助工具 Visual Studio 2008
POIFS Browser 1.2
基礎知識 基本物件導向。
Excel 基礎操作。

 

http://einboch.pixnet.net/blog/post/274497938-使用npoi產生excel檔案

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
加入命名空間:

1
2
3
4
using NPOI;
using NPOI.HSSF.UserModel;
using NPOI.XSSF.UserModel;
using NPOI.SS.UserModel;

程式碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
//範例一,簡單產生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();
}