NPOI
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 不显示