NPOI是POI的.net版本, 是能夠幫助開發者在沒有安裝微軟office的情況下讀寫office文件,支持的文件包括excel,word,ppt等
NPOI.Util 基礎輔助庫
NPOI.POIFS OLE2格式讀寫庫
NPOI.DDF Micosoft Drawing格式讀寫庫
NPOI.SS Excel公式計算庫
NPOI.HPSF OLE2的Summary Information和Document Summary Information屬性讀寫庫
NPOI.HSSF Excel BIFF格式讀寫庫
NPOI.HSSF是專門負責Excel BIFF格式的命名空間,供開發者使用的對象主要位於NPOI.HSSF.UserModel和NPOI.HSSF.Util命名空間下,Workbook的創建用的是NPOI.HSSF.UserModel.HSSFWorkbook類,這個類負責創建Excel文檔
創建一個Excel文檔的步驟
HSSFWorkbook wk = new HSSFWorkbook();//初始化一個實例 //這個實例就相當於一個Excel文檔,但是只是這樣創建出的文檔會報錯,因為一個Excel文檔中至少要有一個sheet(頁) wk.CreateSheet("頁名");//為文檔添加一頁 FileStream file = new FileStream("路徑和文件名",創建方式);//創建一個文件流 wk.Write(file);//把實例傳給文件流,創建出文件 file.Close();//關閉文件流
從excel讀取數據,寫入txt和從txt讀取數據,寫入excel的實例
using System.Text; using System.Threading.Tasks; using NPOI.HSSF.UserModel; using NPOI.HSSF.Util; using System.IO; using NPOI.SS.UserModel; namespace NPOI_and_TXT { public class NPOItoTXT { public void toTXT() { FileStream fs = new FileStream(@"D:\學習\題\npoi\NPOI\NPOI\bin\Debug\test.xls",FileMode.Open,FileAccess.Read); FileStream fsn = new FileStream(@"D:\學習\題\npoi\NPOI\NPOI\bin\Debug\i.txt", FileMode.Create,FileAccess.Write); StreamWriter sw = new StreamWriter(fsn,Encoding.Default); HSSFWorkbook wk = new HSSFWorkbook(fs); ISheet hs =wk.GetSheet("sheet1"); for (int i = 0; i < hs.LastRowNum+1; i++) { IRow ir = hs.GetRow(i); for (int j = 0; j < ir.LastCellNum; j++) { sw.Write(ir.GetCell(j)+" "); } sw.WriteLine(); } Console.WriteLine("更改txt成功"); sw.Close(); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using NPOI.HSSF.UserModel; using NPOI.HSSF.Util; using System.IO; using NPOI.SS.UserModel; namespace NPOI_and_TXT { public class TXTtoNPOI { public void toNPOI() { FileStream fs = new FileStream(@"D:\學習\題\npoi\NPOI\NPOI\bin\Debug\i.txt",FileMode.Open,FileAccess.Read); StreamReader sr = new StreamReader(fs,Encoding.Default); HSSFWorkbook hwb = new HSSFWorkbook(); ISheet hs = hwb.CreateSheet("sheet1"); List<string[]> list = new List<string[]>(); string line = sr.ReadLine(); int w = 0; while (line!=null) { HSSFRow row = (HSSFRow)hs.CreateRow(w); string[] s = line.Split(' '); list.Add(s); for (int i = 0; i < s.Length; i++) { row.CreateCell(i).SetCellValue(list[w][i]); } line = sr.ReadLine(); w++; } Console.WriteLine("更改excel成功"); FileStream file = new FileStream(@"D:\學習\題\npoi\NPOI\NPOI\bin\Debug\test.xls", FileMode.Create); hwb.Write(file); file.Close(); fs.Close(); } } }
NPOI 高級功能
調整頁面縮放比例
sheet.SetZoom(分子,分母)
鎖定列
被鎖定的列無法修改,輸入密碼才可以解除鎖定
ICellStyle Islock = hsk.CreateCellStyle();//創建一個列樣式對象 Islock.IsLocked = true; //設置樣式對象為鎖定(false為不鎖定) ICell cel = sheet.GetRow(1).GetCell(1);//獲取一個列 cel.CellStyle = Islock;//將樣式對象賦給這個列 sheet.ProtectSheet("密碼");//設置解鎖密碼
凍結行,列
被凍結的行,列會固定位置,鼠標下滾依然會顯示在原位置
第一個參數表示要凍結的列數
第二個參數表示要凍結的行數
第三個參數表示右邊區域默認的首例序號
第四個參數表示下邊區域默認的首例序號
sheet.CreateFreezePane(3,1,10,10); //凍結第一行的前三列,右邊和下面區域從第10格開始顯示
默認選中
設為默認的列會在文檔打開時自動選中
cell.SetAsActiveCell();
默認選中區域
第一個參數表示從哪行開始
第二個參數表示從哪行結束
第三個參數表示從哪列開始
第四個參數表示從哪列結束
sheet.SetActiveCellRange(2,5,1,5); //第3行開始 第6行結束 第2列開始 第6列結束
默認選中多個區域
List<CellRangeAddress8Bit> cellranges = new List<CellRangeAddress8Bit>(){ new CellRangeAddress8Bit(1,3,2,5), new CellRangeAddress8Bit(6,7,8,9) };//創建一個用來存儲位置對象的list集合,並初始化兩個位置 sheet.SetActiveCellRange(cellranges,10,5,8);//把集合給頁
可視范圍
sheet.TopRow = 10; sheet.LeftCol = 10; //從頂部向下,左邊向右10格后的范圍才能看到
默認頁
文檔打開時會自動切換到默認頁
workbook.SetActiveSheet(1);//默認第二頁 從0開始
數據有效性
檢查輸入的值是否符合條件,如果不對則會有提示
CellRangeAddressList cr = new CellRangeAddressList(1,10,0,0);//創建一個位置對象,用來表示檢查的區域 DVConstraint constrain1 = DVConstraint.CreateDateConstraint(條件,"最小時間","最大時間","時間格式");//這是檢查時間的方法,還有其他的檢查方法 HSSFDataValidation dataValidate1 = new HSSFDataValidation(檢查區域,檢查條件); dataValidate1.CreateErrorBox("標題","內容");//設置報錯彈框 sheet.AddValidationData(dataValidate1);
組合數據
組合后數據類似於可以收縮和展開,方便查看
sheet.GroupRow(1,5);//組合第二行到第六行 sheet.GroupColumn(1,3);//組合第二列到第四列
隱藏網格
設置文檔的是否顯示網格
sheet.DisplayGridlines = false;//true 顯示 false 不顯示