1 NPOI
1.1 NPOI 是啥
NPOI是优秀开源软件,实现了EXCEL的离线写读。
NPOI 常用dll
NPOI.HSSF
是专门负责Excel BIFF格式的命名空间,开发者使用的对象主要位于NPOI.HSSF.UserModel
和NPOI.HSSF.Util
命名空间下,下面我们要讲到的Workbook的创建用的就是NPOI.HSSF.UserModel.HSSFWorkbook
类,这个类负责创建.xls文档。
在开始创建Workbook之前,我们先要在项目中引用一些必要的NPOI assembly
,如下所示:
NPOI.dll
NPOI.POIFS.dll
NPOI.HSSF.dll
NPOI.Util.dll
要创建一个新的xls文件其实很简单,只要我们初始化一个新的HSSFWorkbook实例就行了,如下所示:
usingNPOI.HSSF.UserModel;
...
HSSFWorkbook hssfworkbook =new HSSFWorkbook();
是不是很方便啊,没有任何参数或设置,但这么创建有一些限制,这样创建出来的Workbook
在Excel中打开是会报错的,因为Excel规定一个Workbook
必须至少带1个Sheet
,这也是为什么在Excel界面中,新建一个Workbook
默认都会新建3个Sheet。所以必须加入下面的创建Sheet的代码才能保证生成的文件正常:
HSSFSheet sheet = hssfworkbook.CreateSheet("newsheet");
hssfworkbook.CreateSheet("Sheet1");
hssfworkbook.CreateSheet("Sheet2");
hssfworkbook.CreateSheet("Sheet3");
把sheet 写入 test.xls
FileStreamfile =newFileStream(@"test.xls", FileMode.Create);
hssfworkbook.Write(file);
file.Close();
1.2 创建单元格
用过Excel的人都知道,单元格是Excel最有意义的东西,我们做任何操作恐怕都要和单元格打交道。在Excel中我们要添加一个单元格只需要点击任何一个单元格,然后输入内容就是了,但是Excel底层其实没有这么简单,不同的单元格是有不同的类型的,比如说数值单元格是用NumberRecord
表示,文本单元格是用LabelSSTRecord
表示,空单元格是用BlankRecord
表示。这也就意味着,在设置单元格时,你必须告诉NPOI你需要创建哪种类型的单元格。
1.2.1 创建行
要创建单元格首先要创建单元格所在的行,比如,下面的代码创建了第0行:
HSSFSheet sheet1 = hssfworkbook.CreateSheet("Sheet1");
HSSFRow row1=sheet1.CreateRow(0);
1.2.2 创建单元格
比如创建A1位置的单元格:
row1.CreateCell(0).SetCellValue(1);
比如嫌这个麻烦
sheet1.CreateRow(0).CreateCell(0).SetCellValue("This is a Sample");
1.2.2.1 获得单元格
sheet1.GetRow(row_index).GetCell(column_index);
1.3 设置单元格的宽度和高度
在Excel中,单元格的宽度其实就是列的宽度,因为Excel假设这一列的单元格的宽度肯定一致。所以要设置单元格的宽度,我们就得从列的宽度下手,HSSFSheet
有个方法叫SetColumnWidth
,共有两个参数:一个是列的索引(从0开始),一个是宽度。
1.3.1 设置单元格的宽度
现在假设你要设置B列的宽度,就可以用下面的代码:
HSSFWorkbook hssfworkbook =new HSSFWorkbook();
HSSFSheet sheet1 = hssfworkbook.CreateSheet("Sheet1");
sheet1.SetColumnWidth(1,100 * 256);
这里你会发现一个有趣的现象,SetColumnWidth的第二个参数要乘以256,这是怎么回事呢?其实,这个参数的单位是1/256个字符宽度,也就是说,这里是把B列的宽度设置为了100个字符。
1.3.2 设置单元格的高度
要设置第一行的高度,可以用如下代码:
sheet1.CreateRow(0).Height= 200*20;
或者
sheet1.CreateRow(0).HeightInPoints= 200;
如果要获得某一行的行高,可以直接拿HSSFRow.Height属性的返回值。
一旦设置了这些属性,如果某一行或者某一列没有设置宽度,就会使用默认宽度或高度。代码如下:
sheet1.DefaultColumnWidth=100*256;
sheet1.DefaultRowHeight=30*20;
1.4 基本计算
从这节开始,我们将开始学习Excel高级一点的功能--公式。为某个单元格指定公式后,单元格中的类容将根据公式计算得出,如图:
图中设置的是一个基本表达式”1+2*3”,单元格A1中将显示此表达式计算的结果”7”,如图所示。对应的C#生成代码也很简单,如下:
HSSFSheet sheet1 = hssfworkbook.CreateSheet("Sheet1");
HSSFRow row1=sheet1.CreateRow(0);
HSSFCell cel1 = row1.CreateCell(0);
HSSFCell cel2 = row1.CreateCell(1);
HSSFCell cel3 = row1.CreateCell(2);
cel1.SetCellFormula("1+2*3");
cel2.SetCellValue(5);
同样,NPOI也支持单元格引用类型的公式设置,如下图中的C1=A1*B1
。
对应的公式设置代码为:
cel3.SetCellFormula("A1*B1");
是不是很简单呢?但要注意,在利用NPOI
写程序时,行和列的计数都是从0开始计算的,但在设置公式时又是按照Excel的单元格命名规则来的。
2 C#安装NPOI
NuGet 画廊 |NPOI 2.6.2
image.png
部分内容转载
作者:腿毛裤
链接:https://www.jianshu.com/p/17e043980aa9
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。