NPOI
NPOI是POI的.net版本, 是能夠幫助開發(fā)者在沒有安裝微軟office的情況下讀寫office文件,支持的文件包括excel,word,ppt等
?
NPOI.Util 基礎(chǔ)輔助庫 NPOI.POIFS OLE2格式讀寫庫 NPOI.DDF Micosoft Drawing格式讀寫庫 NPOI.SS Excel公式計算庫 NPOI.HPSF?OLE2的Summary Information和Document Summary Information屬性讀寫庫 NPOI.HSSF?? Excel BIFF格式讀寫庫NPOI.HSSF是專門負責(zé)Excel BIFF格式的命名空間,供開發(fā)者使用的對象主要位于NPOI.HSSF.UserModel和NPOI.HSSF.Util命名空間下,Workbook的創(chuàng)建用的是NPOI.HSSF.UserModel.HSSFWorkbook類,這個類負責(zé)創(chuàng)建Excel文檔
?
創(chuàng)建一個Excel文檔的步驟
HSSFWorkbook wk = new HSSFWorkbook();//初始化一個實例 //這個實例就相當(dāng)于一個Excel文檔,但是只是這樣創(chuàng)建出的文檔會報錯,因為一個Excel文檔中至少要有一個sheet(頁) wk.CreateSheet("頁名");//為文檔添加一頁 FileStream file = new FileStream("路徑和文件名",創(chuàng)建方式);//創(chuàng)建一個文件流 wk.Write(file);//把實例傳給文件流,創(chuàng)建出文件 file.Close();//關(guān)閉文件流
?
?從excel讀取數(shù)據(jù),寫入txt和從txt讀取數(shù)據(jù),寫入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:\學(xué)習(xí)\題\npoi\NPOI\NPOI\bin\Debug\test.xls",FileMode.Open,FileAccess.Read);FileStream fsn = new FileStream(@"D:\學(xué)習(xí)\題\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:\學(xué)習(xí)\題\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:\學(xué)習(xí)\題\npoi\NPOI\NPOI\bin\Debug\test.xls", FileMode.Create);hwb.Write(file);file.Close();fs.Close();}} }
?
NPOI 高級功能
?
調(diào)整頁面縮放比例
sheet.SetZoom(分子,分母)鎖定列 被鎖定的列無法修改,輸入密碼才可以解除鎖定
ICellStyle Islock = hsk.CreateCellStyle();//創(chuàng)建一個列樣式對象 Islock.IsLocked = true; //設(shè)置樣式對象為鎖定(false為不鎖定) ICell cel = sheet.GetRow(1).GetCell(1);//獲取一個列 cel.CellStyle = Islock;//將樣式對象賦給這個列 sheet.ProtectSheet("密碼");//設(shè)置解鎖密碼凍結(jié)行,列 被凍結(jié)的行,列會固定位置,鼠標下滾依然會顯示在原位置 第一個參數(shù)表示要凍結(jié)的列數(shù) 第二個參數(shù)表示要凍結(jié)的行數(shù) 第三個參數(shù)表示右邊區(qū)域默認的首例序號 第四個參數(shù)表示下邊區(qū)域默認的首例序號
sheet.CreateFreezePane(3,1,10,10); //凍結(jié)第一行的前三列,右邊和下面區(qū)域從第10格開始顯示默認選中 設(shè)為默認的列會在文檔打開時自動選中
cell.SetAsActiveCell();
?
默認選中區(qū)域 第一個參數(shù)表示從哪行開始 第二個參數(shù)表示從哪行結(jié)束 第三個參數(shù)表示從哪列開始 第四個參數(shù)表示從哪列結(jié)束sheet.SetActiveCellRange(2,5,1,5); //第3行開始 第6行結(jié)束 第2列開始 第6列結(jié)束
?
默認選中多個區(qū)域
List<CellRangeAddress8Bit> cellranges = new List<CellRangeAddress8Bit>(){new CellRangeAddress8Bit(1,3,2,5), new CellRangeAddress8Bit(6,7,8,9) };//創(chuàng)建一個用來存儲位置對象的list集合,并初始化兩個位置 sheet.SetActiveCellRange(cellranges,10,5,8);//把集合給頁
?
可視范圍
sheet.TopRow = 10; sheet.LeftCol = 10; //從頂部向下,左邊向右10格后的范圍才能看到
?
默認頁 文檔打開時會自動切換到默認頁workbook.SetActiveSheet(1);//默認第二頁 從0開始數(shù)據(jù)有效性 檢查輸入的值是否符合條件,如果不對則會有提示
CellRangeAddressList cr = new CellRangeAddressList(1,10,0,0);//創(chuàng)建一個位置對象,用來表示檢查的區(qū)域 DVConstraint constrain1 = DVConstraint.CreateDateConstraint(條件,"最小時間","最大時間","時間格式");//這是檢查時間的方法,還有其他的檢查方法 HSSFDataValidation dataValidate1 = new HSSFDataValidation(檢查區(qū)域,檢查條件); dataValidate1.CreateErrorBox("標題","內(nèi)容");//設(shè)置報錯彈框 sheet.AddValidationData(dataValidate1);
?
組合數(shù)據(jù) 組合后數(shù)據(jù)類似于可以收縮和展開,方便查看sheet.GroupRow(1,5);//組合第二行到第六行 sheet.GroupColumn(1,3);//組合第二列到第四列
?
隱藏網(wǎng)格 設(shè)置文檔的是否顯示網(wǎng)格sheet.DisplayGridlines = false;//true 顯示 false 不顯示
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/nicopoiduang/p/8886213.html
總結(jié)
- 上一篇: 钓鱼技巧:如何认识漂相与钓鱼?
- 下一篇: 石榴树怎么嫁接,石榴石的嫁接方法?