1. 程式人生 > >C# 使用NPOI操作Excel檔案

C# 使用NPOI操作Excel檔案

什麼是NPOI?

What’s NPOI
This project is the .NET version of POI Java project at http://poi.apache.org/. POI is an open source project which can help you read/write xls, doc, ppt files. It has a wide application.
For example, you can use it to
a. generate a Excel report without Microsoft Office suite installed on your server and more efficient than call Microsoft Excel ActiveX at background;
b. extract text from Office documents to help you implement full-text indexing feature (most of time this feature is used to create search engines).
c. extract images from Office documents
d. generate Excel sheets that contains formulas

簡而言之,言而簡之,NPOI是源於一個用於讀取xls,doc,ppt文件的POI 專案,POI是Java專案,後面因為有.Net的市場,於是將POI移植到.Net上。

優勢:

在沒有安裝Microsoft Office Excel的機子上也可以對Excel進行操作。另外一種方法是使用.NET自帶的excel API,但是這種方法需要執行環境安裝微軟的excel才行。

NPOI尤其適合在伺服器端生成資料檔案!因為伺服器一般是不安裝office這麼龐大的辦公軟體的

使用方法:

1.準備npoi 的 dll:

2.將NPOI的DLL匯入工程中。

右鍵解決方案資源管理器

裡面的引用
這裡寫圖片描述

點選新增引用
這裡寫圖片描述

點選“瀏覽”->”瀏覽“,開啟檔案對話方塊,選擇所有的NPOI的dll檔案
這裡寫圖片描述

3.引用NPOI的名稱空間。

using NPOI.HSSF.UserModel;
using NPOI.HPSF;
using NPOI.POIFS.FileSystem;
using NPOI.Util;

4.程式設計開發

不管是讀還是寫一個excel檔案,都要先生成一個HSSFWorkbook物件。
NPOI裡面的管理層次為:workbook->worksheet->row->cell.
類比關係型資料庫就是:

NPOI 關係型資料庫
workbook database
worksheet table表
row record記錄
cell field欄位

形象一點就是:
這裡寫圖片描述
具體方法為:

以現有excel檔案資料為基礎,建立一個workbook物件,這種方法可以讀取這個excel檔案的資料內容:

HSSFWorkbook wb;
FileStream file;
file = new FileStream(filepath, FileMode.Open, FileAccess.Read);
wb = new HSSFWorkbook(file);
file.Close();

可以發現是藉助FileStream來讀取excel檔案的,其中的filepath指明excel檔案的路徑。

創新一個新的excel檔案的workbook物件:

HSSFWorkbook wb;
wb = new HSSFWorkbook();

在workbook的基礎上,開啟一個老的sheet,或者建立一個新的表。
開啟老的sheet: wb.GetSheet(sheet的名稱)

HSSFSheet sheet;
sheet=wb.GetSheet("sheet1");

建立一個新的sheet:wb.CreateSheet(sheet的名稱)

HSSFSheet sheet;
sheet=wb.CreateSheet("sheet1");

現在就到具體操作某個行和列了。

建立某個行:CreateRow(i),i是行號,從0開始計數

sheet.CreateRow(i)

獲取某一行:GetRow(i),i是行號,從0開始計數

建立某一列: 需要在定位到行的基礎上

CreateCell(j),j是列號,從0開始計數

sheet.GetRow(i).CreateCell(j);在i行建立第j

獲取某一行:GetCell(j),j是列號,從0開始計數

sheet.GetRow(i).GetCell(j)

行和列都確定了,那就是對單元格的操作啦:

讀單元格:

sheet.GetRow(i).GetCell(j) 就會返回第ij列的內容。

寫單元格:

sheet.GetRow(i).GetCell(j).SetCellValue(內容)

儲存資料到檔案中

file = new FileStream(filepath, FileMode.Open, FileAccess.Write);
wb.Write(file);
file.Close();
wb.Close()

其中workbook的寫入 需要藉助於FileStream來開啟一個檔案流,在建立FileStream的時候,我們可以傳入資料的儲存路徑和檔名。

wb.Write在實際寫入資料。

最後操作完成後需要關閉資源。

總結:

使用NPOI操作excel很方便,關鍵是 workbook,sheet,row,cell的層層定位。

另外 NPOI 使用 HSSFWorkbook 類來處理 xls,XSSFWorkbook 類來處理 xlsx,它們都繼承介面 IWorkbook,因此可以通過 IWorkbook 來統一處理 xls 和 xlsx 格式的檔案。
方法依葫蘆畫瓢