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) 就會返回第i行j列的內容。
寫單元格:
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 格式的檔案。
方法依葫蘆畫瓢