NPOI使用手册

导读:使用NPOI时要注意,然后使用f,当使用Excel内嵌的(或者说预定义)的格式时,当使用自己定义的格式时,都是能够正常使用的,页脚至于一些Excel特殊字符,比如说页码可以用&P,当前日期可以用&D,其他的东西你就自己研究吧。本范例完整代码请见NPOI.Examples中的CreateHeaderFooterInXls项目。NPOI1.2教程-2.2.1设置单元格格式作者:TonyQuNPOI

NPOI使用手册

页脚

至于一些Excel特殊字符,比如说页码可以用&P,当前日期可以用&D,其他的东西你就自己研究吧。

本范例完整代码请见NPOI.Examples中的CreateHeaderFooterInXls项目。

NPOI 1.2教程 - 2.2.1 设置单元格格式

作者:Tony Qu

NPOI官方网站:http://npoi.codeplex.com/

在Excel中我们经常要设置格式,比如说日期格式(yyyymmdd)、小数点格式(1.20)、货币格式($2000)、百分比格式(99.99%)等等,这些东西在过去我们恐怕只能在服务器端生成好,不但增加了服务器端的代码量,还造成了不必要的字符串替换操作,如今NPOI将让服务器从这种完全没有必要的操作中解放出来,一切都将由Excel在客户端处理。 使用NPOI时要注意,所有的格式都是通过CellStyle.DataFormat赋给单元格的,而不是直接赋给单元格。 案例一 日期格式

假设我们现在需要显示的日期的格式为2008年5月5日,可以用下面的代码生成:

HSSFSheet sheet = hssfworkbook.CreateSheet(\); HSSFCell cell = sheet.CreateRow(0).CreateCell(0); cell.SetCellValue(new DateTime(2008,5,5)); //set date format

HSSFCellStyle cellStyle = hssfworkbook.CreateCellStyle(); HSSFDataFormat format = hssfworkbook.CreateDataFormat(); cellStyle.DataFormat = format.GetFormat(\年m月d日\); cell.CellStyle=cellStyle;

由于这里的―yyyy年m月d日‖属于自定义格式(区别于Excel内嵌的格式),所以必须用hssfworkbook.CreateDataFormat()创建一个HSSFDataFormat实例,然后使用f

ormat.GetFormat来获取相应的格式,只要是Excel支持的格式表示方式,这种方式都能够实现。

案例二 保留2位小数

假设我们有个单元格的值为1.2,怎么显示成1.20呢?在Excel中可以用―0.00‖来表示,所以下面的代码就能完成:

// Create a row and put some cells in it. Rows are 0 based. HSSFCell cell = sheet.CreateRow(0).CreateCell(0); //set value for the cell cell.SetCellValue(1.2);

//number format with 2 digits after the decimal point - \ HSSFCellStyle cellStyle = hssfworkbook.CreateCellStyle(); cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat(\); cell.CellStyle = cellStyle;

这里与上面有所不同,用的是HSSFDataFormat.GetBuiltinFormat()方法,之所以用这个,是因为0.00是Excel内嵌的格式,完整的Excel内嵌格式列表大家可以看这个窗口中的自定义列表:

这里就不一一列出了。 案例三 货币格式

货币格式在金融的项目中经常用到,比如说人民币符号¥,美元符号$等,这里可以用下面的代码表示:

HSSFCell cell2 = sheet.CreateRow(1).CreateCell(0); cell2.SetCellValue(20000);

HSSFCellStyle cellStyle2 = hssfworkbook.CreateCellStyle(); HSSFDataFormat format = hssfworkbook.CreateDataFormat(); cellStyle2.DataFormat = format.GetFormat(\); cell2.CellStyle = cellStyle2;

注意,这里还加入了千分位分隔符,所以是#,##,至于为什么这么写,你得去问微软,呵呵。

案例四 百分比

百分比在报表中也很常用,其实基本上和上面一样,只是格式表示是0.00%,代码如下:

cellStyle4.DataFormat = HSSFDataFormat.GetBuiltinFormat(\);

由于这里是内嵌格式,所以直接用HSSFDataFormat.GetBuiltinFormat即可。 案例五 中文大写

在表示金额时,我们时常会用到,我也见过不少兄弟实现了数字转中文大小写的工具类,以后你可以尝试让Excel去处理这一切,代码和刚才差不多,也是改格式的表示:

HSSFDataFormat format = hssfworkbook.CreateDataFormat(); cellStyle6.DataFormat = format.GetFormat(\);

由于是自定义格式,所以用了HSSFDataFormat.GetFormat,相信你对这两种获取格式的形式的区别越来越熟悉了。 案例六 科学计数法

这东西数学课上我们都学过,虽然用的不多,但是既然Excel支持,这里也提一下:

cellStyle3.DataFormat = HSSFDataFormat.GetBuiltinFormat(\);

下面展示下以上这些例子的显示效果:

最后总结一下HSSFDataFormat.GetFormat和HSSFDataFormat.GetBuiltinFormat的区别:

当使用Excel内嵌的(或者说预定义)的格式时,直接用HSSFDataFormat.GetBuiltinFormat静态方法即可。

当使用自己定义的格式时,必须先调用HSSFWorkbook.CreateDataFormat(),因为这时在底层会先找有没有匹配的内嵌FormatRecord,如果没有就会新建一个FormatRecord,所以必须先调用这个方法,然后你就可以用获得的HSSFDataFormat实例的GetFormat方法了,当然相对而言这种方式比较麻烦,所以内嵌格式还是用HSSFDataFormat.GetBuiltinFormat静态方法更加直接一些。不过自定义的格式也不是天马行空随便定义,还是要参照Excel的格式表示来定义,具体请看相关的Excel教程。

注意:自定义的FormatRecord是嵌入xls文件内部的,所以不用担心对方Excel中有没有定义过这种格式,都是能够正常使用的。

相关范例请参考NPOI 1.2正式版中的NumberFormatInXls项目。

NPOI 1.2教程 - 2.2.2 单元格合并

作者:Tony Qu

NPOI官方网站:http://npoi.codeplex.com/

合并单元格在制作表格时很有用,比如说表格的标题就经常是把第一行的单元格合并居中。那么在NPOI中应该如何实现单元格的合并呢?

为了实现这一功能,NPOI引入了新的概念,即Region,因为合并单元格,其实就是设定一个区域。下面说一下Region类的参数,Region总共有4个参数,如下所示

Region的参数 FirstRow FirstColumn

说明

区域中第一个单元格的行号 区域中第一个单元格的列号

LastRow LastColumn

区域中最后一个单元格的行号 区域中最后一个单元格的列号

由于单元格的合并都是在表的基础上建立的,所以我们得先建Sheet:

HSSFWorkbook hssfworkbook = new HSSFWorkbook();

HSSFSheet sheet = hssfworkbook.CreateSheet(\);

接下来我们根据实际场景来做一些演示。

场景一 标题行的合并

这种场景是最常见的,比如说我们要建立一张销售情况表,英文叫Sales Report

我们先设置居中和字体样式,这里我们采用20号字体,代码如下:

HSSFRow row = sheet.CreateRow(0); HSSFCell cell = row.CreateCell(0); cell.SetCellValue(\);

HSSFCellStyle style = hssfworkbook.CreateCellStyle(); style.Alignment = HSSFCellStyle.ALIGN_CENTER; HSSFFont font = hssfworkbook.CreateFont(); font.FontHeight = 20*20; style.SetFont(font); cell.CellStyle = style;

要产生图中的效果,即把A1:F1这6个单元格合并,然后添加合并区域:

sheet.AddMergedRegion(new Region(0, 0, 0, 5));

场景二 多行合并

看完场景一,你可不要认为多行合并就需要一行一行做,其实也只需要一行代码,比如说我们要把C3:E5合并为一个单元格,那么就可以用下面的代码:

sheet.AddMergedRegion(new Region(2, 2, 4, 4));

五星文库wxphp.com包含总结汇报、专业文献、办公文档、党团工作、人文社科、应用文书、外语学习、教程攻略、IT计算机以及NPOI使用手册等内容。

本文共10页1234567>>10