NPOI

C# 专栏收录该内容
8 篇文章 0 订阅

概述

NPOI,顾名思义,就是POI 的.NET 版本。POI 是一套用Java 写成的库,能够帮助开发者在没有安装微软Office 的情况下读写Office 文件。NPOI是一套开源的项目,常用的命名空间,包含以下内容:

  • NPOI.Util: 基础辅助库
  • NPOI.POIFS: OLE2 格式读写库
  • NPOI.DDF: Microsoft Drawing格式读写库
  • NPOI.SS: Excel 公式计算库
  • NPOI.HPSF: OLE2 的Summary Information 和Document Summary Information 属性读写库
  • NPOI.HSSF : Excel BIFF 格式读写库

note:
如果生成的Excel文件后缀是xlsx的话,就不能使用HSSFWorkbook与HSSFSheet类,而必须使用XSSFWorkbook与XSSFSheet类。

Excel文件操作

NPOI.HSSF 是专门负责Excel BIFF 格式的命名空间,供开发者使用的对象主要位于NPOI.HSSF.UserModelNPOI.HSSF.Util 命名空间下。NPOI.HSSF.UserModel.HSSFWorkbook 类,这个类负责创建Excel文档。Excel 规定一个Workbook 必须至少带1 个Sheet。

// 引用动态库并使用命名空间
using NPOI.HSSF.UserModel;

// 实例化HSSFWorkbook对象
HSSFWorkbook hssfWb = new HSSFWorkbook();
// 创建Sheet
hssfWb.CreateSheet("sheet1");
// 或者采用下面的方法,注意此处需要使用类型强制转换。
HSSFSheet sheet1 = (HSSFSheet)hssfWb.CreateSheet("sheet1");
// 新建文件流
FileStream file = new FileStream("d:\\test.xls", FileMode.Create);
// 将HSSFWorkbook实例化的对象写入文件流
hssfWb.Write(file);
// 关闭文件流
file.Close();

基于模板生成Excel文件

NPOI 一大特色之一就是能够轻松读取Office Excel 的格式,即使里面有NPOI 不支持的VBA 宏、图表以及Pivot 表之类的高级记录,NPOI 也能够保证不丢失数据。

// 读取模板文件
HSSFWorkbook wb = new HSSFWorkbook(new FileStream("d:\\template.xls",FileMode.Open,FileAccess.Read));
// 读取模板文件的表
HSSFSheet sheet = (HSSFSheet)wb.GetSheet("yy");
// ForceFormulaRecalculation 是强制要求Excel 在打开时重新计算的属性,在拥有公式的xls文件中十分有用。
sheet.ForceFormulaRecalculation = true;
// 新建XLS文件
FileStream file = new FileStream("d:\\test.xls", FileMode.Create);
// 将更改后的内容写入到新建的文件中
wb.Write(file);
file.Close();

说明:有数据透视表,以及图表的Excel同样适用。

单元格操作

单元格是Excel 最有意义的东西,做任何操作恐怕都要和单元格打交道。在Excel 中要添加一个单元格只需要点击任何一个单元格,然后输入内容就是了,但是Excel 底层其实没有这么简单,不同的单元格是有不同的类型的。

比如说数值单元格是用NumberRecord 表示,文本单元格是用LabelSSTRecord 表示,空单元格是用BlankRecord 表示。这也就意味着,在设置单元格时,必须告诉NPOI 你需要创建哪种类型的单元格。要创建单元格首先要创建单元格所在的行,行建好了就可以建列,通过行和列确定唯一的单元格。

注意:这里的行在Excel 里是从1 开始的,但是NPOI 内部是从0 开始的;列在Excel里面是用字母表示的,而NPOI 中也是用从0 开始的数字表示的,所以要注意转换。

// 创建sheet实例
HSSFSheet sheet1 = (HSSFSheet)hssfWb.CreateSheet("sheet1");
// 新建单元格并赋值
sheet1.CreateRow(0).CreateCell(0).SetCellValue("yaoyuan");
// 获取已经创建好的单元格
sheet1.GetRow(row_index).GetCell(column_index);

单元格格式

在Excel 中我们经常要设置格式,比如说日期格式(yyyymmdd)、小数点格式(1.20)、货币格式($2000)、百分比格式(99.99%)等等。使用NPOI 时要注意,所有的格式都是通过CellStyle.DataFormat 赋给单元格的,而不是直接赋给单元格。

// 实例化 HSSFCellStyle对象
HSSFCellStyle cellStyle = (HSSFCellStyle)hssfWb.CreateCellStyle(); //利用HSSFWorkbook类的CreateCellStyle方法。
// 实例化 HSSFDataFormat对象
// 由于这里的“yyyy 年m 月d 日”属于自定义格式(区别于Excel 内嵌的格式),所以必须用hssfworkbook.CreateDataFormat()创建一个HSSFDataFormat 实例,然后使用format.GetFormat 来获取相应的格式
HSSFDataFormat dataFormat = (HSSFDataFormat)hssfWb.CreateDataFormat();

// 修改HSSFCellStyle对象实例的DataFormat属性
cellStyle.DataFormat = dataFormat.GetFormat("yyyy年m月d日");
// 如果是excel内置的格式,可直接定义
cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00");
//  修改单元格的CellStyle属性。
cell.CellStyle = cellStyle;
  • 0
    点赞
  • 0
    评论
  • 4
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值