npoi这个office写入,我个人有点不方便,但是因为需要使用所以不得不去用了。
原因:
1、 没文档
2、 网上的案例版本不同
3、 对于复杂列不好做处理
跟网上其他工具的对比,好处就是不需要依赖Microsoft的office一套组件就可以对excel进行写入和读取。
第一个核心就是IWorkbook对象
通过它可以操作两种格式的excel,一种是*.xls(HSSFWorkbook),一种是*.xlsx(XSSFWorkbook)
IWorkbook wk = new HSSFWorkbook(); IWorkbook wk = new XSSFWorkbook();
第二个的核心就是Isheet对象
通过它可以操作两种格式的excel的工作簿,一种是*.xls(HSSFSheet),一种是*.xlsx(XSSFSheet)
ISheet sheet = wk.CreateSheet(“”);
或者是获取已有的工作簿
ISheet sheet = wk.GetSheetAt(int indx)
Isheet对象主要负责excel的工作簿
第三个核心就是Irow/Icell对象
IRow对象可以实现对列的控制
ICell对象可以实现对行单元格的控制
IRow需要通过工作簿进行新增
IRow row = sheet.CreateRow(int indx);
ICell需要通过IRow明确列的位置才能对行的单元格进行设置,单元格只能通过IRow来创建
ICell cell = row.CreateCell(int indx);
三个核心能够对excel进行基本的写入的操作
案例:
IWorkbook wk = null; ISheet sheet = null; //获取文件格式 string extension = Path.GetExtension(filePath); //根据不同版本的excel格式获取不同的写入对象 if (extension.Equals(".xls")) { wk = new HSSFWorkbook(); } else { wk = new XSSFWorkbook(); } //创建Excel工作簿 sheet = wk.CreateSheet("new sheet"); //创建指定列 IRow row = sheet.CreateRow(int indx) //创建指定行 ICell cell = row.CreateCell(int indx) //将制作好的excel生成到系统上 MemoryStream ms = new MemoryStream(); wk.Write(ms); using(varfs=newFileStream(filePath,FileMode.Create,FileAccess.Write,FileShare.None,4096,true)) { byte[] b = ms.ToArray(); await fs.WriteAsync(b, 0, b.Length); ms.Close(); fs.Flush(); fs.Close(); }