2.1.6成立页眉和页脚,如若损害本文笔者利益

NPOI使用手册

 

目录

因为多数用户没有积分,所以,笔者帮笔者免费供应下。若是损害本文作者利益,请登时通报作者,小编将及时删除此文书档案。

1.认识NPOI

 

 

NOPI使用手册

2. 使用NPOI生成xls文件

目录

2.1 创设基本内容

1.
认识NPOI

2.1.1创建Workbook和Sheet

 

2.1.2创建DocumentSummaryInformation和SummaryInformation

  1. 使用NPOI生成xls文件

2.1.3成立单元格

2.1 创制基本内容

2.1.5创立批注

2.1.1
创建Workbook和Sheet

2.1.6创立页眉和页脚

2.1.2
创建DocumentSummaryInformation和SummaryInformation

 

2.1.3
成立单元格

2.2 单元格操作

2.1.5
创立批注

2.2.1设置格式

2.1.6
成立页眉和页脚

2.2.2联合单元格

 

2.2.3对齐相关设置

2.2 单元格操作

2.2.4选拔边框

2.2.1
设置格式

2.2.5字体设置

2.2.2
合并单元格

2.2.6背景和纹理

2.2.3
对齐相关设置

2.2.7装置宽度和高度

2.2.4
使用边框

 

2.2.5
字体设置

2.3 使用Excel公式

2.2.6
背景和纹理

2.3.1主干总计

2.2.7
设置宽度和高度

2.3.2 SUM函数

 

2.3.二日期函数

2.3 使用Excel公式

2.3.4字符串相关函数

2.3.1
基本总结

2.3.5 IF函数

2.3.2
SUM函数

2.3.6 CountIf和SumIf函数

2.3.二十一日期函数

2.3.7 Lookup函数

2.3.4
字符串相关函数

2.3.8随机数函数

2.3.5
IF函数

2.3.9通过NPOI拿到公式的重回值

2.3.6
CountIf和SumIf函数

 

2.3.7
Lookup函数

2.4 创立图形

2.3.8
随机数函数

2.4.1画线

2.3.9
通过NPOI获得公式的再次回到值

2.4.2画矩形

 

2.4.3画圆形

2.4 成立图形

2.4.4画Grid

2.4.1
画线

2.4.5插入图片

2.4.2
画矩形

 

2.4.3
画圆形

2.5打字与印刷相关设置

2.4.4
画Grid

  
2.6 高级功效

2.4.5
插入图片

2.6.1调整表单显示比例

 

2.6.2设置密码

2.5
打字与印刷相关安装

2.6.3组合行、列

 
2.6 高级效率

2.6.4锁定列

2.6.1
调整表单显示比例

2.6.5出示/隐藏网格线

2.6.2
设置密码

2.6.6安装开端视图的行、列

2.6.3
组合行、列

2.6.7数据有效性

2.6.4
锁定列

2.6.8生成下拉式菜单

2.6.5
显示/隐藏网格线

 

2.6.6
设置开端视图的行、列

3. 品类执行

2.6.7
数据有效性

3.1基于.xls模板生成Excel文件

2.6.8
生成下拉式菜单

3.2生成九九乘法表

 

3.3生成一张工资单

  1. 项目举办

3.4从xls文件中抽取文本

3.1
基于.xls模板生成Excel文件

3.5都行使用ExcelChart

3.2
生成九九乘法表

3.6导入Excel文件

3.3
生成一张薪金单

 

3.4
从xls文件中抽取文本

NPOI
1.2教程
 –
1 认识NPOI

3.5 巧妙使用Excel
Chart

本章将介绍NPOI的有的基本音信,包罗以下多少个部分

3.6
导入Excel文件

·        什么是NPOI

 

·        版权表明

NPOI 1.2教程 – 1
认识NPOI

·        相关财富

本章将介绍NPOI的有的骨干音讯,包罗以下多少个部分

·        团队介绍

  • 什么是NPOI
  • 版权表达
  • 连锁资源
  • 集体介绍
  • 前程展望
  • 各Assembly的作用

·        今后展望

 

·        各Assembly的作用

1.1 什么是NPOI

 

NPOI,顾名思义,正是POI的.NET版本。那POI又是怎么着呢?POI是一套用Java写成的库,能够援救开发者在未曾设置微软Office的动静下读写Office
97-二零零三的公文,支持的文件格式包含xls, doc,
ppt等。在本文揭发时,POI的时尚版本是3.5 beta 6。

1.1 什么是NPOI

NPOI 1.x是依照POI 3.x版本开发的,与poi 3.2相应的版本是NPOI
1.2,近年来最新文告的本子是1.2.1,在该版本中仅援救读写Excel文件和Drawing格式,别的文件格式将在以后的本子中得到扶助。

NPOI,顾名思义,就是POI的.NET版本。这POI又是什么样呢?POI是一套用Java写成的库,可以扶助开发者在未曾安装微软Office的状态下读写Office
97-二〇〇〇的公文,协理的文件格式包含xls, doc,
ppt等。在本文揭露时,POI的最新版本是3.5 beta 6。

 

NPOI 1.x是遵照POI 3.x版本开发的,与poi 3.2一点青眼的本子是NPOI
1.2,近日流行业发表布的版本是1.2.1,在该版本中仅援助读写Excel文件和Drawing格式,别的文件格式将在事后的版本中获取扶助。

1.2 版权表明

 

NPOI选取的是Apache
2.0证照(poi也是采用这一个许可证),那代表它能够被用于别的生意或非商业项目,你不用担心因为使用它而必须开放你协调的源代码,所以它对于众多转业工作系统开发的同盟社来说绝对是很不错的选用。

1.2 版权表达

自然作为多个开源许可证,肯定也是有一部分任务的,例如要是您在系统中使用NPOI,你必须保留NPOI中的全体宣称音信。对于源代码的其它修改,必须做出肯定的标识。

NPOI采纳的是Apache
2.0许可证(poi也是运用那些许可证),那代表它能够被用于其余商业或非商业项目,你不要顾虑因为运用它而必须开放你协调的源代码,所以它对于广大从业业务种类开发的协作社来说相对是很科学的抉择。

全体的apache
2.0许可证请见http://www.phpx.com/man/Apache-2/license.html

本来作为三个开源许可证,肯定也是有一对无偿的,例如假设您在系统中应用NPOI,你必须保留NPOI中的全数宣称音讯。对于源代码的别样改动,必须做出鲜明的标识。

 

完整的apache
2.0证照请见http://www.phpx.com/man/Apache-2/license.html

1.3 相关能源

 

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

1.3 相关资源

POIFS Browser 1.2

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

下载地址:http://npoi.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24305

POIFS Browser 1.2

QQ交流群:  78142590

下载地址:http://npoi.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24305

 

QQ交流群:  78142590

1.4 团队介绍

 

TonyQu来自于中华新加坡,是那几个类别的倡导者和开发人士,时区是GMT+8,2009年三月开首了NPOI的用度,负责NPOI全数底层库的开支、测试和bug修复。

1.4 团队介绍

个人blog地址为http://tonyqus.cnblogs.com/

托尼Qu来自于中夏族民共和国东京,是这些类别的倡导者和开发人士,时区是欧霉素T+8,二〇〇九年十月始发了NPOI的支出,负责NPOI全数底层库的付出、测试和bug修复。

 

个人blog地址为http://tonyqus.cnblogs.com/

Hüseyin
Tüfekçilerli来自于土耳其共和国(The Republic of Turkey)的伊Stan布尔,也是其一项指标开发职员,时区是林大霉素T+2,二〇一〇年十月涉足了NPOI的开发,首要担负POIFS
Browser 1.0的开发工作。

 

个人blog地址为http://huseyint.com/

HüseyinTüfekçilerli来自于土耳其共和国的伊Stan布尔,也是以此项目标开发人士,时区是丙胺博莱霉素T+2,贰零壹零年1月出席了NPOI的开发,首要承担POIFS
Browser 1.0的成本工作。

 

个人blog地址为http://huseyint.com/

aTao.Xiang,来自华夏,二〇〇八年七月始发参与该类型,主要加入了NPOI
1.第22中学文版的作文工作和松手工作

 

个人blog地址为http://www.cnblogs.com/atao/

aTao.Xiang,来自中国,二〇〇九年4月始于参加该项目,首要到场了NPOI
1.2中文版的编写工作和加大工作

 

个人blog地址为http://www.cnblogs.com/atao/

1.5 回看与展望

 

此时此刻POI版本中的HWPF(用于Word的读写库)还不是很平稳,并非正式颁发版本,且负责HWPF的显要开发职员已经偏离,所以NPOI恐怕考虑本人再一次开发HWPF。此外,近期微软正在开发Open
XML Format
SDK,NPOI或然会抛弃对ooxml的支撑,当然这取决用户的急需和Open XML
Format SDK的平稳和速度。从脚下而言,NPOI有几大优势

1.5 回看与展望

先是,完全基于.NET 2.0,而非.NET 3.0/3.5。

时下POI版本中的HWPF(用于Word的读写库)还不是很平静,并非正规发布版本,且负责HWPF的重点开发职员已经偏离,所以NPOI只怕考虑自身再也开发HWPF。其余,最近微软正在开发Open
XML Format
SDK,NPOI恐怕会放弃对ooxml的帮忙,当然那取决用户的必要和Open XML
Format SDK的安静和进程。从此时此刻而言,NPOI有几大优势

第①,读写速度快(有个海外的男人儿回复说,他本来用ExcelPackage生成用了4-四个小时,未来只需求4-六分钟)

首先,完全基于.NET 2.0,而非.NET 3.0/3.5。

其三,稳定性好(相对于用Office
OIA而言,终究那东西是基于Automation做的,在Server上跑个Automation的事物,想想都觉着可怕),跑过了贴近一千个测试用例(来自于POI的testcase目录)

第一,读写速度快(有个国外的小兄弟回复说,他原本用ExcelPackage生成用了4-五个时辰,现在只须要4-肆分钟)

第⑥,API简单易用,当然那得感谢POI的设计师们

其三,稳定性好(相对于用Office
OIA而言,终究这东西是基于Automation做的,在Server上跑个Automation的事物,想想都以为可怕),跑过了近乎一千个测试用例(来自于POI的testcase目录)

第六,完美帮忙Excel
二零零四格式(听新闻说myxls不或许正确读取xls模板,但NPOI能够),以往也许是享有Office
二〇〇四格式

第4,API不难易用,当然那得多谢POI的设计师们

希望NPOI把这几个优势继续发扬下去,那样NPOI才会更有竞争力。

第⑤,完美支持Excel
二零零二格式(传闻myxls无法正确读取xls模板,但NPOI能够),未来大概是兼具Office
二零零一格式

 

梦想NPOI把这一个优势继续发扬下去,那样NPOI才会更有竞争力。

1.6 NPOI 1.2中各Assembly的作用

 

NPOI最近有几许个assembly,种种的功力各有不一致,开发职员能够按需加载相应的assembly。在那边差不离罗列一下:

1.6 NPOI 1.2中各Assembly的作用

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

NPOI方今有少数个assembly,每种的功力各有不一致,开发人士可以按需加载相应的assembly。在此地大约罗列一下:

 

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

NPOI 1.2教程 – 2.1.1
创建Workbook和Sheet

 

作者:Tony Qu

NPOI
1.2教程
 –
2.1.1 创建Workbook和Sheet

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

作者:Tony Qu

  

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

创办Workbook说白了便是创制七个Excel文件,当然在NPOI中更规范的象征是在内部存款和储蓄器中创建一个Workbook对象流。

  

本节作为第③章的开篇章节,将做相比较详细的执教,以支援NPOI的学习者更好的明白NPOI的三结合和应用。

开创Workbook说白了正是开创3个Excel文件,当然在NPOI中更确切的代表是在内部存储器中创立3个Workbook对象流。

NPOI.HSSF是特别负责Excel
BIFF格式的命名空间,供开发者使用的目的首要放在NPOI.HSSF.UserModel和NPOI.HSSF.Util命名空间下,下边大家要讲到的Workbook的创造用的正是NPOI.HSSF.UserModel.HSSFWorkbook类,那么些类负责创造.xls文档。

本节作为第一章的开张营业章节,将做对比详细的执教,以支持NPOI的学人更好的领会NPOI的构成和动用。

在起来创办Workbook在此以前,大家先要在档次中援引一些必需的NPOI
assembly,如下所示:

NPOI.HSSF是专责Excel
BIFF格式的命名空间,供开发者使用的指标重要放在NPOI.HSSF.UserModel和NPOI.HSSF.Util命名空间下,下边大家要讲到的Workbook的创造用的就是NPOI.HSSF.UserModel.HSSFWorkbook类,那个类负责创造.xls文书档案。

NPOI.dll

在始发创办Workbook在此之前,我们先要在类型中援引一些必不可少的NPOI
assembly,如下所示:

NPOI.POIFS.dll

NPOI.dll

NPOI.HSSF.dll

NPOI.POIFS.dll

NPOI.Util.dll

NPOI.HSSF.dll

 

NPOI.Util.dll

要创造一个新的xls文件其实极粗略,只要大家伊始化2个新的HSSFWorkbook实例就行了,如下所示:

 

using NPOI.HSSF.UserModel;

要创制二个新的xls文件其实一点也不细略,只要我们开首化1个新的HSSFWorkbook实例就行了,如下所示:

using NPOI.HSSF.UserModel;

HSSFWorkbook hssfworkbook = new HSSFWorkbook();

是还是不是很有益于啊,没有此外参数或安装,但如此成立有一些限量,那样创立出来的Workbook在Excel中打开是会报错的,因为Excel规定多个Workbook必须至少带1个Sheet,那也是为啥在Excel界面中,新建1个Workbook暗中认可都会新建1个Sheet。所以必须进入上边包车型客车创立Sheet的代码才能确定保障生成的公文经常:

HSSFWorkbookhssfworkbook =newHSSFWorkbook();

HSSFSheet sheet = hssfworkbook.CreateSheet(“new sheet”);

是或不是很便宜啊,没有其余参数或设置,但如此成立有一部分限量,那样成立出来的Workbook在Excel中打开是会报错的,因为Excel规定1个Workbook必须至少带一个Sheet,那也是怎么在Excel界面中,新建三个Workbook暗中同意都会新建三个Sheet。所以必须投入上面包车型客车创导Sheet的代码才能确定保障生成的文件符合规律:

若是要创设标准的Excel文件,即具备三个Sheet,能够用下边包车型大巴代码:

HSSFSheetsheet = hssfworkbook.CreateSheet(“newsheet”);

hssfworkbook.CreateSheet(“Sheet1”);

如果要成立标准的Excel文件,即怀有一个Sheet,能够用上边包车型大巴代码:

hssfworkbook.CreateSheet(“Sheet2”);

hssfworkbook.CreateSheet(“Sheet1”);

hssfworkbook.CreateSheet(“Sheet3”);

hssfworkbook.CreateSheet(“Sheet2”);

说到底就是把这么些HSSFWorkbook实例写入文件了,代码也一点也不细略,如下所示:

hssfworkbook.CreateSheet(“Sheet3”);

FileStream file = new FileStream(@”test.xls”, FileMode.Create);

最终就是把那些HSSFWorkbook实例写入文件了,代码也极粗略,如下所示:

hssfworkbook.Write(file);

FileStreamfile =new FileStream(@”test.xls”, FileMode.Create);

file.Close();

hssfworkbook.Write(file);

 

file.Close();

那边假诺文件名是test.xls,,在创建完FileStream之后,间接调用HSSFWorkbook类的Write方法就足以了。

 

末尾你能够打开test.xls文件确认一下,是还是不是有2个空的Sheet。

那边要是文件名是test.xls,,在成立完FileStream之后,直接调用HSSFWorkbook类的Write方法就能够了。

 

末段你能够打开test.xls文件确认一下,是否有二个空的Sheet。

连带范例请见NPOI
1.2正式版
中的CreateEmptyExcelFile项目。

相关范例请见NPOI
1.2正式版
中的CreateEmptyExcelFile项目。

 

 

NPOI 1.2教程 – 2.1.2
创建DocumentSummaryInformation和SummaryInformation

NPOI
1.2教程
 –
2.1.2 创建DocumentSummaryInformation和SummaryInformation

作者:Tony Qu

作者:Tony Qu

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

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

今日接到了诸多过来,有msn上的,也有blog上的,作者代表NPOI
Team向具有协理和尊崇NPOI的兄弟表示谢谢,让大家一同完善NPOI 。

昨日接到了重重过来,有msn上的,也有blog上的,小编代表NPOI
Team向装有援助和关怀NPOI的弟兄表示谢谢,让大家一起完善NPOI。

 

 

前一节中我们讲解了如何创制1个新的Workbook,但在此进度中山大学家莫不会发觉3个细节,那一个文件没有包罗DocummentSummaryInformation和SummaryInformation头。假若您还不是很通晓作者在说哪些,能够看POIFS
Browser打开test.xls文件后的截图:

前一节中大家讲课了什么成立3个新的Workbook,但在此进程中山大学家可能会意识三个细节,那个文件并未包涵DocummentSummaryInformation和SummaryInformation头。假诺你还不是很明亮笔者在说什么样,能够看POIFS
Browser打开test.xls文件后的截图:

 

 

您会意识唯有Workbook目录,别的什么都没有,但实在四个健康的xls文件,比如说Excel生成的xls文件是近乎上边包车型大巴结构:

您会发觉唯有Workbook目录,别的什么都不曾,但实则一个健康的xls文件,比如说Excel生成的xls文件是近乎下边包车型客车布局:

 

 

是还是不是多出来DocumentSummaryInformation和SummaryInformation五个头?很几个人大概对DocumentSummaryInformation和SummaryInformation很生疏,或许首先次听他们讲那玩意儿,没事,那很正规,因为普通用户很少会去行使这么些事物,但它们其实比想象中有用。

是还是不是多出来DocumentSummaryInformation和SummaryInformation三个头?很多少人想必对DocumentSummaryInformation和SummaryInformation很生疏,恐怕首先次听他们说那东西,没事,那很日常,因为普通用户很少会去行使那一个事物,但它们其实比想象中有用。

 

 

请看上海教室中的音讯,如小编、标题、标记、备注、核心等新闻,其实这个新闻都是储存在DocummentSummaryInformation和SummaryInformation里面包车型地铁,这么一说本身想我们应该领悟了吧,那个音信是为了赶快提取文件音信准备。在Windows
XP中,也有相应的查阅和修改界面,只是没有Vista这么方便,如下所示:

请看上海教室中的消息,如作者、标题、标记、备注、宗旨等新闻,其实那些音信都以储存在DocummentSummaryInformation和SummaryInformation里面包车型地铁,这么一说自个儿想我们应该精通了呢,那一个音信是为着急忙提取文件音讯准备。在Windows
XP中,也有相应的查看和改动界面,只是没有Vista这么方便,如下所示:

 

 

那大概也是成都百货上千人对于那一个消息漠不爱惜的来头吧,因为没有人愿意通过
右击文件->属性 这样复杂的操作去查看一些摘要新闻。

那只怕也是诸多少人对此这一个新闻漠不关切的因由吧,因为从没人愿意通过右击文件->属性那样复杂的操作去查看一些摘要音讯。

 

 

提示

提示

DocummentSummaryInformation和SummaryInformation并不是Office文件的专利,只倘使OLE2格式,都足以具备那多少个头新闻,主要目标正是为着在一直不完整读取文件数量的场所下获得文件的摘要音信,同时也可用作桌面搜素的基于。要打听DocummentSummaryInformation的全方位天性请见http://msdn.microsoft.com/en-us/library/aa380374(VS.85).aspx;要询问SummaryInformation的全部特性请见http://msdn.microsoft.com/en-us/library/aa369794(VS.85).aspx

DocummentSummaryInformation和SummaryInformation并不是Office文件的专利,只即使OLE2格式,都能够享有那七个头消息,主要指标正是为着在并未完好读取文件数量的地方下取得文件的摘要音信,同时也可用作桌面搜素的依照。要驾驭DocummentSummaryInformation的总体质量请见http://msdn.microsoft.com/en-us/library/aa380374(VS.85).aspx;要打听SummaryInformation的满贯性能请见http://msdn.microsoft.com/en-us/library/aa369794(VS.85).aspx

 

 

好了,说到此地,笔者想我们对此接下去大家要创制的始末有了开班的认识,上边大家就登时初阶创立。

好了,说到那边,笔者想大家对于接下去大家要开创的内容有了开班的认识,上面大家就应声先河创立。

先是引述以下这几个命名空间:

率先引述以下那些命名空间:

using NPOI.HSSF.UserModel;

using NPOI.HSSF.UserModel;

using NPOI.HPSF;

using NPOI.HPSF;

using NPOI.POIFS.FileSystem;

using NPOI.POIFS.FileSystem;

中间与DocummentSummaryInformation和SummaryInformation密切相关的是HPSF命名空间。

里面与DocummentSummaryInformation和SummaryInformation密切相关的是HPSF命名空间。

率先创设Workbook

先是成立Workbook

HSSFWorkbook hssfworkbook = new HSSFWorkbook();

HSSFWorkbookhssfworkbook =newHSSFWorkbook();

然后创制DocumentSummaryInformation

接下来创造DocumentSummaryInformation

DocumentSummaryInformation dsi =
PropertySetFactory.CreateDocumentSummaryInformation();

DocumentSummaryInformationdsi =
PropertySetFactory.CreateDocumentSummaryInformation();

dsi.Company = “NPOI Team”;

dsi.Company =”NPOI Team”;

再创建SummaryInformation

再创建SummaryInformation

SummaryInformation si = PropertySetFactory.CreateSummaryInformation();

SummaryInformationsi = PropertySetFactory.CreateSummaryInformation();

si.Subject = “NPOI SDK Example”;

si.Subject =”NPOI SDK Example”;

因为是范例,那里仅各设置了三个性子,其余都不曾安装。

因为是范例,那里仅各设置了2性格能,其余都不曾设置。

当今我们把成立好的靶子赋给Workbook,那样才能保险那些音讯被写入文件。

今昔我们把成立好的对象赋给Workbook,那样才能确认保障那一个新闻被写入文件。

hssfworkbook.DocumentSummaryInformation = dsi;

hssfworkbook.DocumentSummaryInformation= dsi;

hssfworkbook.SummaryInformation = si;

hssfworkbook.SummaryInformation= si;

最后和2.1.1节同样,大家把Workbook通过FileStream写入文件。

说到底和2.1.1节一律,我们把Workbook通过FileStream写入文件。

 

 

连锁范例请见 NPOI
1.2正式版
中的CreatePOIFSFileWithProperties

有关范例请见NPOI
1.2正式版
中的CreatePOIFSFileWithProperties

 

 

NPOI 1.2科目 – 2.1.3
制造单元格

NPOI
1.2教程
 –
2.1.3 创立单元格

作者:Tony Qu

作者:Tony Qu

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

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

 

 

用过Excel的人都明白,单元格是Excel最有含义的事物,大家做任何操作只怕都要和单元格打交道。在Excel中我们要添加二个单元格只须要点击任何一个单元格,然后输入内容正是了,但是Excel底层其实远非那样简单,分歧的单元格是有两样的花色的,比如说数值单元格是用NumberRecord表示,文本单元格是用LabelSSTRecord表示,空单元格是用BlankRecord表示。那也就表示,在装置单元格时,你不可能不告诉NPOI你供给创立哪种类型的单元格。

用过Excel的人都知情,单元格是Excel最有意义的事物,我们做任何操作只怕都要和单元格打交道。在Excel中大家要添加1个单元格只须求点击任何1个单元格,然后输入内容正是了,不过Excel底层其实远非如此不难,不一致的单元格是有分裂的类型的,比如说数值单元格是用NumberRecord表示,文本单元格是用LabelSSTRecord表示,空单元格是用BlankRecord表示。那也就表示,在设置单元格时,你必须告诉NPOI你供给创建哪一种档次的单元格。

要创造单元格首先要创设单元格所在的行,比如,上面包车型客车代码创设了第0行:

要制造单元格首先要成立单元格所在的行,比如,下边包车型的士代码创设了第0行:

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);

HSSFSheetsheet1 = hssfworkbook.CreateSheet(“Sheet1”);

HSSFRow row1=sheet1.CreateRow(0);

HSSFRowrow1=sheet1.CreateRow(0);

行建好了,就足以建单元格了,比如成立A1岗位的单元格:

行建好了,就能够建单元格了,比如创制A1任务的单元格:

row1.CreateCell(0).SetCellValue(1);

row1.CreateCell(0).SetCellValue(1);

此处要说美赞臣(Dumex)下,SetCellValue有少数种重载,你能够安装单元格为bool、double、DateTime、string和HSSFRichTextString类型。个中对于string类型的重载调用的便是HSSFRichTextString类型的重载,所以是平等的,HSSFRichTextString可用来有字体也许Unicode的文件。

那里要验证一下,SetCellValue有一些种重载,你能够安装单元格为bool、double、DateTime、string和HSSFRichTextString类型。当中对于string类型的重载调用的正是HSSFRichTextString类型的重载,所以是同等的,HSSFRichTextString可用来有字体只怕Unicode的文件。

一旦你以为每一行要声美赞臣个HSSFRow很困苦,能够用上面的不二法门:

如果您觉得每一行要声雅培个HSSFRow很麻烦,能够用上面包车型客车点子:

sheet1.CreateRow(0).CreateCell(0).SetCellValue(“This is a Sample”);

sheet1.CreateRow(0).CreateCell(0).SetCellValue(“This is a Sample”);

诸如此类用有个前提,那正是第0行还没创制过,不然得那般用:

这么用有个前提,那就是第0行还没创造过,不然得那般用:

sheet1.GetRow(0).CreateCell(0).SetCellValue(“This is a Sample”);

sheet1.GetRow(0).CreateCell(0).SetCellValue(“This is a Sample”);

 

 

只顾:那里的行在Excel里是从1起来的,但是NPOI内部是从0初步的;列在Excel里面是用字母代表的,而NPOI中也是用从0开头的数字代表的,所以要小心变换。

专注:那里的行在Excel里是从1初步的,不过NPOI内部是从0早先的;列在Excel里面是用字母代表的,而NPOI中也是用从0开头的数字代表的,所以要留意变换。

 

 

一旦你要获得某3个一度成立的单元格对象,可以用上面包车型大巴代码:

即使您要博取某3个早已成立的单元格对象,能够用上边包车型地铁代码:

sheet1.GetRow(row_index).GetCell(column_index);

sheet1.GetRow(row_index).GetCell(column_index);

 

 

本节仅上课最主旨的单元格创立,有关单元格格式设置、样式等高档话题请见:2.2节单元格相关操作。

本节仅上课最宗旨的单元格创立,有关单元格格式设置、样式等高档话题请见:2.2节单元格相关操作。

有关范例请见 NPOI
1.2正式版
中的SetCellValuesInXls项目。

连锁范例请见NPOI
1.2正式版
中的SetCellValuesInXls项目。

 

 

NPOI 1.2学科 – 2.1.4
创立批注

NPOI
1.2教程
 –
2.1.4 制造批注

作者:Tony Qu

作者:Tony Qu

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

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

 

 

不少人多少用Excel中的批注,所以笔者特意截了张图,让大家精通本节大家要创立的到底是什么样事物。

众四个人有点用Excel中的批注,所以自个儿特意截了张图,让大家了解本节大家要创制的终究是什么事物。

 

 

在过去,大家大概没有主意落到实处这一效能,因为不论是cvs法、html法、oledb法都不曾提供那样的接口,当然Office
PIA法能够做到,但是质量实在太差,而且安静倒霉,平日莫名其妙crash(那是某某兄弟给本身的申报,小编引用了下,呵呵)。在其后的课程中,你将看到越来越多在过去不可能透过古板方法达成的事物,好戏才刚刚开头。

在过去,大家或许没有主意落到实处这一功力,因为不管cvs法、html法、oledb法都尚未提供这么的接口,当然Office
PIA法能够做到,不过质量实在太差,而且安静倒霉,平日不可捉摸crash(那是某某兄弟给自家的举报,小编引用了下,呵呵)。在事后的教程中,你将看到越来越多在过去不或者通过古板办法完成的东西,好戏才刚刚起初。

批注首要有多少个属性须求设置,贰个是批注的职位和尺寸、一个是批注的文书、还有一个是批注的小编。

批注首要有多个属性需求安装,1个是批注的岗位和大小、贰个是批注的公文、还有多个是批注的小编。

 

 

批注的职位和大小,在Excel中是与单元格密切相关的,NPOI中通过HSSFClientAnchor的实例来表示,它的构造函数比较复杂,有玖个参数,它们各自是

批注的职位和分寸,在Excel中是与单元格密切相关的,NPOI中经过HSSFClientAnchor的实例来表示,它的构造函数比较复杂,有7个参数,它们各自是

参数

说明

dx1

第1个单元格中x轴的偏移量

dy1

第1个单元格中y轴的偏移量

dx2

第2个单元格中x轴的偏移量

dy2

第2个单元格中y轴的偏移量

col1

第1个单元格的列号

row1

第1个单元格的行号

col2

第2个单元格的列号

row2

第2个单元格的行号

参数

说明

dx1

第1个单元格中x轴的偏移量

dy1

第1个单元格中y轴的偏移量

dx2

第2个单元格中x轴的偏移量

dy2

第2个单元格中y轴的偏移量

col1

第1个单元格的列号

row1

第1个单元格的行号

col2

第2个单元格的列号

row2

第2个单元格的行号

 

 

例如,若是大家打算让注释展现在B3和E5之间,就应该如此写:

譬如说,假诺大家打算让注释展现在B3和E5之间,就应该这么写:

HSSFPatriarch patr = sheet.CreateDrawingPatriarch();

HSSFPatriarchpatr = sheet.CreateDrawingPatriarch();

HSSFComment comment1 = patr.CreateComment(new HSSFClientAnchor(0, 0, 0,
0, 1, 2 , 4, 4));

HSSFCommentcomment1 = patr.CreateComment(new HSSFClientAnchor(0, 0, 0,
0, 1, 2 , 4, 4));

下边大家设置这些批注的剧情和作者,这几个相比较简单:

上面大家设置这些批注的始末和小编,那几个相比简单:

comment1.String = new HSSFRichTextString(“Hello World”);

comment1.String=newHSSFRichTextString(“Hello World”);

comment1.Author = “NPOI Team”;

comment1.Author=”NPOI Team”;

末尾一步正是把批注赋给有个别单元格:

终极一步正是把批注赋给某些单元格:

HSSFCell cell = sheet.CreateRow(1).CreateCell(1);

HSSFCell cell= sheet.CreateRow(1).CreateCell(1);

cell.CellComment = comment1;

cell.CellComment= comment1;

对此批注,你有二种选取,一种是隐蔽(默许),一种是体现(即表单一打开就显示该批注),能够由此comment1.Visible属性来决定。

对于批注,你有二种选择,一种是藏匿(暗许),一种是呈现(即表单一打开就体现该批注),可以因而comment1.Visible属性来支配。

 

 

看了地点那张图我们就活该领悟了,那里有三个批注,上边那多少个是展现的,上边十分是暗藏的。

看了下边那张图我们就应该明了了,那里有3个批注,上面这几个是显得的,上边12分是潜伏的。

连锁范例请见 NPOI
1.2正式版
中的SetCellCommentInXls。

有关范例请见NPOI
1.2正式版
中的SetCellCommentInXls。

 

 

NPOI 1.2课程 – 2.1.6
创立页眉和页脚

NPOI
1.2教程
 –
2.1.6 成立页眉和页脚

作者:Tony Qu

作者:Tony Qu

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

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

 

 

很几人并不知道Excel的页眉和页脚功能,因为在界面上是显得不断页眉和页脚的,必须在打字与印刷页面中才能看到,那也直接导致了其安装界面也呈现更隐衷,你无法不进入页面设置
–> 页眉和页脚才能安装。以下是Office 2006中的设置界面。

不可胜贡士并不知道Excel的页眉和页脚成效,因为在界面上是显得不断页眉和页脚的,必须在打字与印刷页面中才能观望,那也直接促成了其设置界面也显得更隐衷,你必须进入页面设置 –>页眉和页脚才能设置。以下是Office
二零零七中的设置界面。

 

 

当你按“自定义页眉”或“自定义页脚”时,你会看出以下界面,Excel把页眉、页脚分成了左中右三片段,那点并未只有呈现在界面上,在尾部的存款和储蓄中也是这么。借使您设置的是“左”的内容,底层的储存字符串就会在起初加上&L,假使是“右”的始末则会拉长&福睿斯,所以HeaderRecord中的字符串看上去是这么的:”&C&LFooter
A&冠道”,那一个字符串的意味是仅设置了“左”的剧情,内容是Footer A。

当你按“自定义页眉”或“自定义页脚”时,你会合到以下界面,Excel把页眉、页脚分成了左中右三片段,那点并未只有呈今后界面上,在底部的仓库储存中也是这么。假如您设置的是“左”的始末,底层的蕴藏字符串就会在始发加上&L,假诺是“右”的内容则会增进&途乐,所以HeaderRecord中的字符串看上去是这么的:”&C&LFooter
A&汉兰达”,这几个字符串的意思是仅设置了“左”的内容,内容是Footer A。

 

 

看了这么些作者想你应当对页眉和页脚有所明白了,回过头来说NPOI,NPOI中任重(Ren Zhong)而道远是靠HSSFSheet.Header和HSSFSheet.Footer来设置的,这四个性格分别是HSSFHeader和HSSFFooter类型的。

看了那个笔者想你应该对页眉和页脚有所驾驭了,回过头来说NPOI,NPOI中非常重倘若靠HSSFSheet.Header和HSSFSheet.Footer来设置的,那五个个性分别是HSSFHeader和HSSFFooter类型的。

 

 

参考代码如下:

参考代码如下:

HSSFSheet s1 = hssfworkbook.CreateSheet(“Sheet1”);

HSSFSheet s1= hssfworkbook.CreateSheet(“Sheet1”);

s1.CreateRow(0).CreateCell(1).SetCellValue(123);

s1.CreateRow(0).CreateCell(1).SetCellValue(123);

 

 

//set header text

//set headertext

s1.Header.Center = “This is a test sheet”;

s1.Header.Center=”This is a test sheet”;

//set footer text

//set footertext

s1.Footer.Left = “Copyright NPOI Team”;

s1.Footer.Left=”Copyright NPOI Team”;

s1.Footer.Right = “created by Tony Qu(瞿杰)”;

s1.Footer.Right=”created by Tony Qu(瞿杰)”;

 

 

上述代码中自作者添加了页眉的Center内容,Footer的Left和Right内容,在打字与印刷预览中看到的功能大约是那般的:

上述代码中本人添加了页眉的Center内容,Footer的Left和Right内容,在打字与印刷预览中看到的效益大概是这么的:

页眉

页眉

 

 

页脚

页脚

 

 

至于有个别Excel特殊字符,比如说页码能够用&P,当明日子能够用&D,别的的事物你就和好研商吗。

至于有个别Excel特殊字符,比如说页码能够用&P,当前几天期能够用&D,别的的事物你就融洽商讨吗。

 

 

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

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

 

 

NPOI 1.2学科 – 2.2.1
设置单元格格式

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

作者:Tony Qu

作者:Tony Qu

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

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

 

 

在Excel中我们日常要安装格式,比如说日期格式(yyyymmdd)、小数点格式(1.20)、货币格式($2000)、百分比格式(99.99%)等等,那个东西在过去大家可能只可以在服务器端生成好,不但扩大了劳动器端的代码量,还导致了不须要的字符串替换操作,近日NPOI将让服务器从那种完全没有须要的操作中解放出来,一切都将由Excel在客户端处理。

在Excel中我们平时要设置格式,比如说日期格式(yyyymmdd)、小数点格式(1.20)、货币格式($3000)、百分比格式(99.99%)等等,这一个事物在过去我们可能只辛亏服务器端生成好,不但扩大了劳务器端的代码量,还导致了不供给的字符串替换操作,近来NPOI将让服务器从那种完全没有必要的操作中解放出来,一切都将由Excel在客户端处理。

选拔NPOI时要小心,全数的格式都是通过CellStyle.DataFormat赋给单元格的,而不是平素赋给单元格。

利用NPOI时要小心,全体的格式都以通过CellStyle.DataFormat赋给单元格的,而不是直接赋给单元格。

案例一  日期格式

案例一 日期格式

即便大家今后须求展现的日子的格式为二〇〇八年7月二八日,能够用上面包车型地铁代码生成:

一经大家现在亟待呈现的日子的格式为二零零六年一月3日,可以用上边包车型地铁代码生成:

HSSFSheet sheet = hssfworkbook.CreateSheet(“new sheet”);

HSSFSheetsheet = hssfworkbook.CreateSheet(“newsheet”);

HSSFCell cell = sheet.CreateRow(0).CreateCell(0);

HSSFCell cell= sheet.CreateRow(0).CreateCell(0);

cell.SetCellValue(new DateTime(2008,5,5));

cell.SetCellValue(newDateTime(2008,5,5));

//set date format

//set dateformat

HSSFCellStyle cellStyle = hssfworkbook.CreateCellStyle();

HSSFCellStylecellStyle = hssfworkbook.CreateCellStyle();

HSSFDataFormat format = hssfworkbook.CreateDataFormat();

HSSFDataFormatformat = hssfworkbook.CreateDataFormat();

cellStyle.DataFormat = format.GetFormat(“yyyy年m月d日”);

cellStyle.DataFormat= format.GetFormat(“yyyy年m月d日”);

cell.CellStyle=cellStyle;

cell.CellStyle=cellStyle;

出于此处的“yyyy年m月d日”属于自定义格式(不同于Excel内嵌的格式),所以必须用hssfworkbook.CreateDataFormat()创制三个HSSFDataFormat实例,然后使用format.GetFormat来获得相应的格式,只假设Excel帮忙的格式表示方法,那种办法都能够完成。

是因为此地的“yyyy年m月d日”属于自定义格式(分裂于Excel内嵌的格式),所以必须用hssfworkbook.CreateDataFormat()创造叁个HSSFDataFormat实例,然后使用format.GetFormat来博取相应的格式,只借使Excel扶助的格式表示方法,那种艺术都能够落到实处。

案例二保存4人小数

案例二保存二位小数

一旦大家有个单元格的值为1.2,怎么显得成1.20啊?在Excel中能够用“0.00”来代表,所以上面包车型大巴代码就能到位:

假定我们有个单元格的值为1.2,怎么显得成1.20吧?在Excel中得以用“0.00”来表示,所以下边包车型客车代码就能做到:

// Create a row and put some cells in it. Rows are 0 based.

// Create arow and put some cells in it. Rows are 0 based.

HSSFCell cell = sheet.CreateRow(0).CreateCell(0);

HSSFCell cell= sheet.CreateRow(0).CreateCell(0);

//set value for the cell

//set valuefor the cell

cell.SetCellValue(1.2);

cell.SetCellValue(1.2);

//number format with 2 digits after the decimal point – “1.20”

//numberformat with 2 digits after the decimal point – “1.20”

HSSFCellStyle cellStyle = hssfworkbook.CreateCellStyle();

HSSFCellStylecellStyle = hssfworkbook.CreateCellStyle();

cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat(“0.00”);

cellStyle.DataFormat= HSSFDataFormat.GetBuiltinFormat(“0.00”);

cell.CellStyle = cellStyle;

cell.CellStyle= cellStyle;

 

 

此处与地点有所分歧,用的是HSSFDataFormat.GetBuiltinFormat()方法,之所以用这几个,是因为0.00是Excel内嵌的格式,完整的Excel内嵌格式列表大家能够看那个窗口中的自定义列表:

此地与地方有所不一致,用的是HSSFDataFormat.GetBuiltinFormat()方法,之所以用那个,是因为0.00是Excel内嵌的格式,完整的Excel内嵌格式列表大家能够看这么些窗口中的自定义列表:

 

 

此间就不一一列出了。

那里就不一一列出了。

案例三货币格式

案例三货币格式

通货格式在财政和经济的花色中平时利用,比如说人民币符号¥,澳元符号$等,那里能够用下边包车型大巴代码表示:

货币格式在财经的门类中平时选取,比如说人民币符号¥,欧元符号$等,那里能够用上边包车型地铁代码表示:

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

HSSFCellcell2 = sheet.CreateRow(1).CreateCell(0);

cell2.SetCellValue(20000);

cell2.SetCellValue(20000);

HSSFCellStyle cellStyle2 = hssfworkbook.CreateCellStyle();

HSSFCellStylecellStyle2 = hssfworkbook.CreateCellStyle();

HSSFDataFormat format = hssfworkbook.CreateDataFormat();

HSSFDataFormatformat = hssfworkbook.CreateDataFormat();

cellStyle2.DataFormat = format.GetFormat(“¥#,##0”);

cellStyle2.DataFormat= format.GetFormat(“¥#,##0”);

cell2.CellStyle = cellStyle2;

cell2.CellStyle= cellStyle2;

 

 

小心,那里还加入了千分位分隔符,所以是#,##,至于为啥那样写,你得去问微软,呵呵。

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

案例四百分比

案例四百分比

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

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

cellStyle4.DataFormat = HSSFDataFormat.GetBuiltinFormat(“0.00%”);

cellStyle4.DataFormat= HSSFDataFormat.GetBuiltinFormat(“0.00%”);

由于那里是内嵌格式,所以间接用HSSFDataFormat.GetBuiltinFormat即可。

是因为这里是内嵌格式,所以一向用HSSFDataFormat.GetBuiltinFormat即可。

案例五华语大写

案例五普通话大写

在象征金额时,大家日常会用到,作者也见过很多兄弟完结了数字转汉语大小写的工具类,今后您能够品味让Excel去处理这一切,代码和刚刚基本上,也是改格式的代表:

在象征金额时,大家日常会用到,笔者也见过无数弟兄完结了数字转普通话大小写的工具类,现在你能够尝试让Excel去处理那总体,代码和刚刚大致,也是改格式的意味:

HSSFDataFormat format = hssfworkbook.CreateDataFormat();

HSSFDataFormatformat = hssfworkbook.CreateDataFormat();

cellStyle6.DataFormat = format.GetFormat(“[DbNum2][$-804]0”);

cellStyle6.DataFormat= format.GetFormat(“[DbNum2][$-804]0”);

 

 

是因为是自定义格式,所以用了HSSFDataFormat.GetFormat,相信你对这三种获得格式的样式的不相同越来越熟知了。

鉴于是自定义格式,所以用了HSSFDataFormat.GetFormat,相信你对那三种获得格式的样式的界别越来越熟练了。

案例六科学计数法

案例六科学计数法

那东西数学课上大家都学过,固然用的不多,不过既然Excel支持,那里也提一下:

那东西数学课上咱们都学过,固然用的不多,可是既然Excel扶助,那里也提一下:

cellStyle3.DataFormat = HSSFDataFormat.GetBuiltinFormat(“0.00E+00”);

cellStyle3.DataFormat= HSSFDataFormat.GetBuiltinFormat(“0.00E+00”);

 

 

下边呈现下以上那几个事例的来得效果:

上面展示下以上这一个事例的显得效果:

 

 

最终总计一下HSSFDataFormat.GetFormat和HSSFDataFormat.GetBuiltinFormat的区分:

说到底总计一下HSSFDataFormat.GetFormat和HSSFDataFormat.GetBuiltinFormat的界别:

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

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

当使用本身定义的格式时,必须先调用HSSFWorkbook.CreateDataFormat(),因为那时候在底层会先找有没有合营的内嵌FormatRecord,固然没有就会新建1个FormatRecord,所以必须先调用这么些方法,然后你就能够用收获的HSSFDataFormat实例的GetFormat方法了,当然相对而言那种格局相比较麻烦,所以内嵌格式如故用HSSFDataFormat.GetBuiltinFormat静态方法越发直白一些。不过自定义的格式也不是天马行空随便定义,依旧要参照Excel的格式表示来定义,具体请看有关的Excel教程。

当使用自个儿定义的格式时,必须先调用HSSFWorkbook.CreateDataFormat(),因为这时候在底部会先找有没有非常的内嵌FormatRecord,假诺没有就会新建三个FormatRecord,所以必须先调用这几个方法,然后您就足以用取得的HSSFDataFormat实例的GetFormat方法了,当然相对而言那种艺术相比麻烦,所以内嵌格式还是用HSSFDataFormat.GetBuiltinFormat静态方法尤其直接一些。但是自定义的格式也不是天马行空随便定义,依旧要参照Excel的格式表示来定义,具体请六柱预测关的Excel教程。

注意:自定义的FormatRecord是嵌入xls文件之中的,所以不要顾虑对方Excel中有没有定义过那种格式,都以力所能及健康使用的。

注意:自定义的FormatRecord是嵌入xls文件之中的,所以不用操心对方Excel中有没有定义过这种格式,都以力所能及平常使用的。

 

 

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

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

 

 

NPOI 1.2科目 – 2.2.2
单元格合并

NPOI
1.2教程
 –
2.2.2 单元格合并

作者:Tony Qu

作者:Tony Qu

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

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

 

 

统一单元格在塑造表格时很有用,比如说表格的标题就时常是把第壹行的单元格合并居中。那么在NPOI中应有如何已毕单元格的会晤呢?

统一单元格在制作表格时很有用,比如说表格的题目就时常是把第叁行的单元格合并居中。那么在NPOI中应当什么落实单元格的联合呢?

为了落到实处这一效益,NPOI引入了新的概念,即Region,因为联合单元格,其实正是设定2个区域。上面说一下Region类的参数,Region总共有陆个参数,如下所示

为了达成这一功力,NPOI引入了新的概念,即Region,因为联合单元格,其实正是设定二个区域。上面说一下Region类的参数,Region总共有5个参数,如下所示

Region的参数

说明

FirstRow

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

FirstColumn

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

LastRow

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

LastColumn

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

Region的参数

说明

FirstRow

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

FirstColumn

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

LastRow

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

LastColumn

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

是因为单元格的联结都以在表的根基上建立的,所以大家得先建Sheet:

是因为单元格的相会都以在表的基本功上建立的,所以大家得先建Sheet:

HSSFWorkbook hssfworkbook = new HSSFWorkbook();

HSSFWorkbookhssfworkbook =newHSSFWorkbook();

HSSFSheet sheet = hssfworkbook.CreateSheet(“new sheet”);

HSSFSheetsheet = hssfworkbook.CreateSheet(“newsheet”);

接下去大家依据实际情况来做一些示范。

接下去大家依据实际处境来做一些演示。

 

 

现象一标题行的统一

情状一标题行的会面

那种光景是最广大的,比如说大家要创建一张销售情状表,英文叫Sales Report

那种气象是最广大的,比如说大家要建立一张销售情况表,英文叫Sales Report

 

 

我们先安装居二月字体样式,那里大家利用20号字体,代码如下:

大家先安装居仲春字体样式,这里我们使用20号字体,代码如下:

HSSFRow row = sheet.CreateRow(0);

HSSFRow row =sheet.CreateRow(0);

HSSFCell cell = row.CreateCell(0);

HSSFCell cell= row.CreateCell(0);

cell.SetCellValue(“Sales Report”);

cell.SetCellValue(“Sales Report”);

HSSFCellStyle style = hssfworkbook.CreateCellStyle();

HSSFCellStylestyle = hssfworkbook.CreateCellStyle();

style.Alignment = HSSFCellStyle.ALIGN_CENTER;

style.Alignment= HSSFCellStyle.ALIGN_CENTER;

HSSFFont font = hssfworkbook.CreateFont();

HSSFFont font= hssfworkbook.CreateFont();

font.FontHeight = 20*20;

font.FontHeight= 20*20;

style.SetFont(font);

style.SetFont(font);

cell.CellStyle = style;

cell.CellStyle= style;

要爆发图中的效果,即把A1:F1那四个单元格合并,然后添加合并区域:

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

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

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

 

 

现象二多行统一

情状二多行统一

看完场景一,你可不用以为多行统一就须求一行一行做,其实也只供给一行代码,比如说大家要把C3:E5合并为3个单元格,那么就足以用上边包车型地铁代码:

看完场景一,你可不要认为多行统一就必要一行一行做,其实也只须要一行代码,比如说我们要把C3:E5合并为多少个单元格,那么就足以用上边包车型大巴代码:

 

 

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

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

提示尽管你从未用CreateRow和CreateCell创制过行或单元格,也截然能够一向开立区域然后把这一区域联合,Excel的区域统一音讯是独自存款和储蓄的,和RowRecord、ColumnInfoRecord不设有直接关联。

晋升固然你未曾用CreateRow和CreateCell创制过行或单元格,也统统可以直接创建区域然后把这一区域统一,Excel的区域联合音讯是单独存款和储蓄的,和RowRecord、ColumnInfoRecord不存在直接关系。

 

 

有关范例请参见NPOI
1.2正式版
中的MergedCellInXls项目。

连锁范例请参见NPOI
1.2正式版
中的MergedCellInXls项目。

 

 

NPOI 1.2科目 – 2.2.3
单元格对齐相关设置

NPOI
1.2教程
 –
2.2.3 单元格对齐相关设置

作者:Tony Qu

作者:Tony Qu

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

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

 

 

本节将围绕“对齐”选项卡中的安装开始展览,就算实际你会意识该选项卡中的很多设置和对齐没有怎么关联。合并单元格已经在2.2.2节讲过了,那里就不提了。

本节将围绕“对齐”选项卡中的装置开始展览,纵然实际你会意识该选项卡中的很多安装和对齐没有啥关联。合并单元格已经在2.2.2节讲过了,这里就不提了。

 

 

首先大家用代码创制要求的单元格,代码如下:

率先我们用代码创造要求的单元格,代码如下:

HSSFWorkbook hssfworkbook = new HSSFWorkbook();

HSSFWorkbookhssfworkbook =new HSSFWorkbook();

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);

HSSFSheetsheet1 = hssfworkbook.CreateSheet(“Sheet1”);

HSSFRow row = sheet1.CreateRow(0);

HSSFRow row =sheet1.CreateRow(0);

row.CreateCell(0).SetCellValue(“Test”);

row.CreateCell(0).SetCellValue(“Test”);

此间我们假诺在A0单元格中插手了文本Test。

此间大家即使在A0单元格中加入了文本Test。

 

 

请留意接下去大家要做的持有操作都以在CellStyle的根基上成功的,所以大家创设2个HSSFCellStyle:

请留意接下去大家要做的享有操作都以在CellStyle的功底上做到的,所以大家创设二个HSSFCellStyle:

HSSFCellStyle style=hssfworkbook.CreateCellStyle();

HSSFCellStylestyle=hssfworkbook.CreateCellStyle();

 

 

水平对齐

水平对齐

此地用的是HSSFCellStyle.Alignment,暗中认可值自然是常规,即HSSFCellStyle.ALIGN_GENERAL。

此地用的是HSSFCellStyle.Alignment,暗许值自然是常规,即HSSFCellStyle.ALIGN_GENERAL。

一旦是右侧对齐就是

若果是左边对齐就是

style.Alignment = HSSFCellStyle.ALIGN_LEFT;

style.Alignment= HSSFCellStyle.ALIGN_LEFT;

就算是居中对齐正是

尽管果居中对齐就是

style.Alignment = HSSFCellStyle.ALIGN_CENTER;

style.Alignment= HSSFCellStyle.ALIGN_CENTER;

倘假使右手对齐便是

假若是右手对齐就是

style.Alignment = HSSFCellStyle.ALIGN_RIGHT;

style.Alignment= HSSFCellStyle.ALIGN_RIGHT;

假设是跨列举中正是

一经是跨列举中正是

style.Alignment = HSSFCellStyle.ALIGN_CENTER_SELECTION;

style.Alignment= HSSFCellStyle.ALIGN_CENTER_SELECTION;

只如若两端对齐正是

如假若两端对齐就是

style.Alignment = HSSFCellStyle.ALIGN_JUSTIFY;

style.Alignment= HSSFCellStyle.ALIGN_JUSTIFY;

设假诺填写正是

尽管是填写正是

style.Alignment = HSSFCellStyle.ALIGN_FILL;

style.Alignment= HSSFCellStyle.ALIGN_FILL;

 

 

注意:以上接纳仅当有丰盛的大幅时才能发出作用,不安装宽度也许看不出不一样。

瞩目:以上采用仅当有丰硕的小幅时才能生出效益,不设置宽度大概看不出区别。

 

 

垂直对齐

垂直对齐

那边用的是HSSFCellStyle.VerticalAlignment,暗许值为居中,即HSSFCellStyle.VE奇骏TICAL_CENTER

此间用的是HSSFCellStyle.VerticalAlignment,暗中认可值为居中,即HSSFCellStyle.VEKoleosTICAL_CENTER

倘若是靠上正是

假诺是靠上就是

style.VerticalAlignment=HSSFCellStyle.VERTICAL_TOP

style.VerticalAlignment=HSSFCellStyle.VERTICAL_TOP

比方是居中就是

一旦是居中正是

style.VerticalAlignment=HSSFCellStyle.VERTICAL_CENTER

style.VerticalAlignment=HSSFCellStyle.VERTICAL_CENTER

若果是靠下正是

只如果靠下正是

style.VerticalAlignment=HSSFCellStyle.VERTICAL_BOTTOM

style.VerticalAlignment=HSSFCellStyle.VERTICAL_BOTTOM

如假诺两端对齐就是

设纵然两端对齐就是

style.VerticalAlignment=HSSFCellStyle.VERTICAL_JUSTIFY

style.VerticalAlignment=HSSFCellStyle.VERTICAL_JUSTIFY

留意:以上选拔仅当有足够的惊人时才能发出效益,不安装中度恐怕看不出差别。

瞩目:以上选拔仅当有丰盛的万丈时才能生出功用,不安装中度只怕看不出差距。

 

 

自行换行

机动换行

自行换行翻译成英文其实就是Wrap的情致,所以那里大家理应用WrapText属性,那是1个布尔属性

自动换行翻译成英文其实就是Wrap的情趣,所以那里大家应该用WrapText属性,那是一个布尔属性

style.WrapText = true;

style.WrapText=true;

意义如下所示:

作用如下所示:

 

 

 

 

文件缩进

文件缩进

 

 

这是2个不太引人注意的选项,所以那边给张图出来,让大家驾驭是哪些,缩进说白了正是文本前边的空白,大家同样能够用属性来安装,那脾本性叫做Indention。

那是3个不太引人注意的选项,所以那边给张图出来,让大家知道是何许,缩进说白了就是文件前边的空白,大家同样可以用属性来安装,那些个性叫做Indention。

style.Indention = 3;

style.Indention= 3;

 

 

文本旋转

文件旋转

文件方向我们一定在Excel中安装过,上图中正是调整界面,重要参数是度数,那么大家如何在NPOI中设置呢?

文件方向我们肯定在Excel中装置过,上海教室中便是调整界面,首要参数是度数,那么大家如何在NPOI中安装呢?

style.Rotation=(short)90;

style.Rotation=(short)90;

以上代码是把单元格A第11中学的文本逆时针转动90度,等同于下图中的设置:

如上代码是把单元格A1中的文本逆时针转动90度,等同于下图中的设置:

   

   

 

 

请留心,那里的Rotation取值是从-90到90,而不是0-180度。

请留心,那里的Rotation取值是从-90到90,而不是0-180度。

 

 

最后别忘了把体制变量style赋给HSSFCellStyle.CellStyle,否则就落空了,呵呵!

说到底别忘了把体制变量style赋给HSSFCellStyle.CellStyle,不然就泡汤了,呵呵!

 

 

如上的有的职能,比如文本旋转和自行换行,使用守旧的cvs和html法或者是无能为力完成的。随着学习的不断深远,你将尤其发现到应用NPOI生成Excel其实如此总结。

上述的有的意义,比如文本旋转和自动换行,使用守旧的cvs和html法大概是无力回天落到实处的。随着学习的不断深切,你将越发发现到使用NPOI生成Excel其实如此简单。

相关范例请参见NPOI
1.2正式版
中的SetAlignmentInXls和RotateTextInXls。

有关范例请参见NPOI
1.2正式版
中的SetAlignmentInXls和RotateTextInXls。

 

NPOI
1.2教程
 –
2.2.4 设置单元格边框

NPOI 1.2课程 – 2.2.4
设置单元格边框

作者:Tony Qu

作者:Tony Qu

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

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

 

 

多多表格中都要动用边框,本节将为您根本教学NPOI中边框的安装和平运动用。

众多报表中都要运用边框,本节将为您根本讲解NPOI中边框的装置和使用。

边框和其余单元格设置同一也是在HSSFCellStyle上操作的,HSSFCellStyle有2种和边框相关的性质,分别是:

边框和其余单元格设置同样也是在HSSFCellStyle上操作的,HSSFCellStyle有2种和边框相关的品质,分别是:

边框相关属性

说明

范例

Border+方向

边框类型

BorderTop, BorderBottom,BorderLeft, BorderRight

方向+BorderColor

边框颜色

TopBorderColor,BottomBorderColor, LeftBorderColor, RightBorderColor

边框相关属性

说明

范例

Border+方向

边框类型

BorderTop, BorderBottom,BorderLeft, BorderRight

方向+BorderColor

边框颜色

TopBorderColor,BottomBorderColor, LeftBorderColor, RightBorderColor

 

 

其间边框类型分为以下两种:

里面边框类型分为以下三种:

边框范例图

对应的静态值

 

HSSFCellStyle.BORDER_DOTTED

 

HSSFCellStyle.BORDER_HAIR

 

HSSFCellStyle.BORDER_DASH_DOT_DOT

 

HSSFCellStyle.BORDER_DASH_DOT

 

HSSFCellStyle.BORDER_DASHED

 

HSSFCellStyle.BORDER_THIN

 

HSSFCellStyle.BORDER_MEDIUM_DASH_DOT_DOT

 

HSSFCellStyle.BORDER_SLANTED_DASH_DOT

 

HSSFCellStyle.BORDER_MEDIUM_DASH_DOT

 

HSSFCellStyle.BORDER_MEDIUM_DASHED

 

HSSFCellStyle.BORDER_MEDIUM

 

HSSFCellStyle.BORDER_THICK

 

HSSFCellStyle.BORDER_DOUBLE

边框范例图

对应的静态值

 

HSSFCellStyle.BORDER_DOTTED

 

HSSFCellStyle.BORDER_HAIR

 

HSSFCellStyle.BORDER_DASH_DOT_DOT

 

HSSFCellStyle.BORDER_DASH_DOT

 

HSSFCellStyle.BORDER_DASHED

 

HSSFCellStyle.BORDER_THIN

 

HSSFCellStyle.BORDER_MEDIUM_DASH_DOT_DOT

 

HSSFCellStyle.BORDER_SLANTED_DASH_DOT

 

HSSFCellStyle.BORDER_MEDIUM_DASH_DOT

 

HSSFCellStyle.BORDER_MEDIUM_DASHED

 

HSSFCellStyle.BORDER_MEDIUM

 

HSSFCellStyle.BORDER_THICK

 

HSSFCellStyle.BORDER_DOUBLE

关于颜色那就那多少个了,全体在HSSFColor上边,如HSSFColor.GREEN,HSSFColor.RED,都以静态实例,能够直接引用。

至于颜色那就广大了,全体在HSSFColor上面,如HSSFColor.GREEN,
HSSFColor.RED,都以静态实例,能够一向引用。

上面大家只要大家要把3个单元格的四周边框都安装上,能够用下边包车型大巴代码:

上边我们只要大家要把二个单元格的周围边框都安装上,能够用上边包车型客车代码:

HSSFSheetsheet = hssfworkbook.CreateSheet(“newsheet”);

HSSFSheet sheet = hssfworkbook.CreateSheet(“new sheet”);

 

 

// Create arow and put some cells in it. Rows are 0 based.

// Create a row and put some cells in it. Rows are 0 based.

HSSFRow row =sheet.CreateRow(1);

HSSFRow row = sheet.CreateRow(1);

// Create acell and put a value in it.

// Create a cell and put a value in it.

HSSFCell cell= row.CreateCell(1);

HSSFCell cell = row.CreateCell(1);

// Style thecell with borders all around.

// Style the cell with borders all around.

HSSFCellStylestyle = hssfworkbook.CreateCellStyle();

HSSFCellStyle style = hssfworkbook.CreateCellStyle();

style.BorderBottom=HSSFCellStyle.BORDER_THIN;

style.BorderBottom= HSSFCellStyle.BORDER_THIN;

style.BorderLeft=HSSFCellStyle.BORDER_THIN;

style.BorderLeft= HSSFCellStyle.BORDER_THIN;

style.BorderRight=HSSFCellStyle.BORDER_THIN;

style.BorderRight= HSSFCellStyle.BORDER_THIN;

style.BorderTop= HSSFCellStyle.BORDER_THIN ;

style.BorderTop = HSSFCellStyle.BORDER_THIN ;

cell.CellStyle=style;

cell.CellStyle= style;

那段代码应用了最常见的细边框,使得那几个单元格看上去像块空心砖头。

那段代码应用了最常见的细边框,使得那些单元格看上去像块空心砖头。

 

 

只顾:那里大家从未安装边框的水彩,但那不会潜移默化最终的功能,因为Excel会用默许的鲜蓝给边框上色。

专注:那里咱们从未设置边框的颜料,但那不会影响最终的效劳,因为Excel会用默许的浅绿灰给边框上色。

 

 

假使要安装颜色的话,也很不难,如下:

一旦要设置颜色的话,也很不难,如下:

style.BottomBorderColor=HSSFColor.GREEN.index;

style.BottomBorderColor= HSSFColor.GREEN.index;

以上代码将底部边框设置为深紫,要留意,不是从来把HSSFColor.GREEN赋给XXXXBorderColor属性,而是把index的值赋给它。

以上代码将尾部边框设置为黑色,要留意,不是向来把HSSFColor.GREEN赋给XXXXBorderColor属性,而是把index的值赋给它。

 

 

连带范例请参见NPOI
1.2正式版
中的SetBorderStyleInXls项目。

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

 

 

NPOI
1.2教程
 –
2.2.5 设置单元格字体

NPOI 1.2课程 – 2.2.5
设置单元格字体

作者:Tony Qu

作者:Tony Qu

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

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

 

 

本节大家将三番柒回采取NPOI来设置单元格格式,这一节大家器重讲哪些设置“字体”。

本节大家将继承利用NPOI来设置单元格格式,这一节我们根本讲哪些设置“字体”。

 

 

 

 

在安装字体此前,大家先是要做的便是开创字体对象,那和开创数字格式很一般。

在设置字体从前,大家率先要做的就是开创字体对象,那和创办数字格式很一般。

HSSFFont font= hssfworkbook.CreateFont();

HSSFFont font = hssfworkbook.CreateFont();

那句话会在Excel文件之中创设相应的FontRecord,所以你不用客户因为本身机器上的Excel没有对号入座的字体设置而招致设置丢失。

那句话会在Excel文件之中创造相应的FontRecord,所以您不用客户因为自个儿机器上的Excel没有相应的书体设置而招致设置丢失。

字体在装置实现后,我们就足以把它赋给单元格样式,代码如下:

字体在安装完毕后,大家就足以把它赋给单元格样式,代码如下:

HSSFCellStylestyle1 = hssfworkbook.CreateCellStyle();

HSSFCellStyle style1 = hssfworkbook.CreateCellStyle();

style1.SetFont(font);

style1.SetFont(font);

cell1.CellStyle=style1;

cell1.CellStyle=style1;

此处的cell1是HSSFCell的三个实例。

那边的cell1是HSSFCell的二个实例。

 

 

好了,上面我们就起来对字体举办设置。

好了,上面大家就从头对字体实行设置。

字体名称

字体名称

此间的书体名称是通过HSSFFont.FontName进行设置的,至于实际的称呼,只就算常用字体都得以,比如说Arial,
Verdana等,当然也能够是汉语字体名,如钟鼓文、燕体等。可是设置字体名称有个前提,那就是一旦打开那么些xls文件的客户机上有那种字体,假设没有,Excel将动用默许字体。

此间的字体名称是因而HSSFFont.FontName进行安装的,至于实际的名称,只假若常用字体都得以,比如说Arial,
Verdana等,当然也足以是汉语字体名,如金鼎文、燕书等。可是设置字体名称有个前提,那正是要是打开那几个xls文件的客户机上有那种字体,假若没有,Excel将动用暗中同意字体。

上边便是安装字体名称为“大篆”的代码:

下边正是安装字体名称为“陶文”的代码:

font.FontName=”宋体”;

font.FontName = “宋体”;

字号

字号

与字号有关的品质有三个,三个是FontHeight,一个是FontHeightInPoints。分裂在于,FontHeight的值是FontHeightInPoints的20倍,常常大家在Excel界面中看出的字号,比如说12,对应的是FontHeightInPoints的值,而FontHeight要发生12号字体的尺寸,值应该是240。所以普通提议你用FontHeightInPoint属性。

与字号有关的性质有七个,三个是FontHeight,一个是FontHeightInPoints。差距在于,FontHeight的值是FontHeightInPoints的20倍,日常我们在Excel界面中来看的字号,比如说12,对应的是FontHeightInPoints的值,而FontHeight要产生12号字体的深浅,值应该是240。所以平时建议您用FontHeightInPoint属性。

尽管要设置字号为12,代码正是

一旦要安装字号为12,代码就是

font.FontHeightInPoints= 12;

font.FontHeightInPoints = 12;

 

 

字体颜色

字体颜色

那里大概会与CellStyle上的ForegroundColor和BackgroundColor爆发模糊,其实具备的书体颜色都是在HSSFFont的实例上设置的,CellStyle的ForegroundColor和BackgroundColor分别指背景填充色和填充图案的颜色,和文书颜色非亲非故。

此间恐怕会与CellStyle上的ForegroundColor和BackgroundColor发生模糊,其实有着的书体颜色都以在HSSFFont的实例上安装的,CellStyle的ForegroundColor和BackgroundColor分别指背景填充色和填充图案的水彩,和文件颜色非亲非故。

要安装字体颜色,大家得以用HSSFFont.Color属性,颜色能够通过HSSFColor获得,代码如下所示:

要设置字体颜色,我们得以用HSSFFont.Color属性,颜色能够通过HSSFColor得到,代码如下所示:

font.Color =HSSFColor.RED.index;

font.Color = HSSFColor.RED.index;

那行代码把公文设置为黄绿。

那行代码把公文设置为革命。

 

 

下划线

下划线

普普通通大家所说的下划线都以单线条的,其实Excel援救某个种下划线,如下所示:

一般大家所说的下划线都以单线条的,其实Excel辅助少数种下划线,如下所示:

类型

对应的值

单下划线

HSSFFont.U_SINGLE

双下划线

HSSFFont.U_DOUBLE

会计用单下划线

HSSFFont.U_SINGLE_ACCOUNTING

会计用双下划线

HSSFFont.U_DOUBLE_ACCOUNTING

无下划线

HSSFFont.U_NONE

类型

对应的值

单下划线

HSSFFont.U_SINGLE

双下划线

HSSFFont.U_DOUBLE

会计用单下划线

HSSFFont.U_SINGLE_ACCOUNTING

会计用双下划线

HSSFFont.U_DOUBLE_ACCOUNTING

无下划线

HSSFFont.U_NONE

当你要安装下划线时,能够用HSSFFont.Underline属性,那是一个byte类型的值,例如

当你要安装下划线时,能够用HSSFFont.Underline属性,那是2个byte类型的值,例如

font.Underline=HSSFFont.U_SINGLE

font.Underline=HSSFFont.U_SINGLE

这行代码便是安装单下划线的代码。

那行代码正是安装单下划线的代码。

上标下标

上标下标

设置那东西能够用HSSFFont.TypeOffset属性,值有以下两种:

安装那东西得以用HSSFFont.TypeOffset属性,值有以下二种:

TypeOffset的值

说明

HSSFFont.SS_SUPER

上标

HSSFFont.SS_SUB

下标

HSSFFont.SS_NONE

普通,默认值

TypeOffset的值

说明

HSSFFont.SS_SUPER

上标

HSSFFont.SS_SUB

下标

HSSFFont.SS_NONE

普通,默认值

因此只要您要上标的话,能够用上面包车型客车代码:

故而一旦你要上标的话,可以用上面包车型客车代码:

font.TypeOffset=HSSFFont.SS_SUPER;

font.TypeOffset=HSSFFont.SS_SUPER;

删除线

删除线

设置那东西得以用HSSFFont.IsStrikeout属性,当为true时,表示有删除线;为false则意味从未删除线。

安装那东西得以用HSSFFont.IsStrikeout属性,当为true时,表示有删除线;为false则意味着尚未去除线。

 

 

有关范例请参见NPOI
1.2正式版
中的ApplyFontInXls的项目。

连锁范例请参见NPOI
1.2正式版
中的ApplyFontInXls的项目。

NPOI
1.2教程
 –
2.2.6装置单元格的背景和图画

 

作者:Tony Qu

NPOI 1.2科目 –
2.2.6装置单元格的背景和画画

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

作者:Tony Qu

 

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

本节大家将用NPOI来为单元格添加背景和绘画。

 

 

本节我们将用NPOI来为单元格添加背景和画画。

在之前的教程中,大家早就涉及HSSFCellStyle有多少个背景颜色属性,一个叫FillBackgroundColor,另一个叫FillForegroundColor,但骨子里那指的都是背景颜色,那怎么还有ForegroundColor呢?为了能够援救我们理解,大家举叁个实际的例证,上边这么些图案是Excel的三个单元格:

 

 

在事先的科目中,我们曾经关系HSSFCellStyle有多少个背景颜色属性,二个叫FillBackgroundColor,另1个叫FillForegroundColor,但实际这指的都是背景颜色,那为何还有ForegroundColor呢?为了能够援助我们明白,大家举二个事实上的事例,上面那么些图案是Excel的2个单元格:

线是反革命的,背景是深灰蓝的。那里的线其实就是底下的Excel界面中的图案:

 

 

线是灰白的,背景是庚子革命的。那里的线其实正是上面的Excel界面中的图案:

 

 

关于线的颜色则是丹青颜色,即暗黄。

 

据此上述单元格假若要用NPOI来安装就能够用于下代码完结:

至于线的颜料则是美术颜色,即宝蓝。

//fillbackground

故此上述单元格如若要用NPOI来设置就可以用于下代码完结:

HSSFCellStylestyle8 = hssfworkbook.CreateCellStyle();

//fill background

style8.FillForegroundColor= NPOI.HSSF.Util.HSSFColor.WHITE.index;

HSSFCellStyle style8 = hssfworkbook.CreateCellStyle();

style8.FillPattern= HSSFCellStyle.SQUARES;

style8.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.WHITE.index;

style8.FillBackgroundColor= NPOI.HSSF.Util.HSSFColor.RED.index;

style8.FillPattern = HSSFCellStyle.SQUARES;

sheet1.CreateRow(7).CreateCell(0).CellStyle= style8;

style8.FillBackgroundColor = NPOI.HSSF.Util.HSSFColor.RED.index;

今昔是否掌握部分了,那里的FillPattern就画画样式,全体的枚举值都以HSSFCellStyle的常量;FillForegroundColor正是丹青的颜色,而FillBackgroundColor则是背景的水彩,即浅绛红。

sheet1.CreateRow(7).CreateCell(0).CellStyle = style8;

下边罗列一下美术样式及其对应的值:

以后是或不是通晓一些了,那里的FillPattern就画画样式,全体的枚举值都以HSSFCellStyle的常量;FillForegroundColor正是美术的颜料,而FillBackgroundColor则是背景的颜色,即草地绿。

图案样式

常量

 

HSSFCellStyle.NO_FILL

 

HSSFCellStyle.ALT_BARS

 

HSSFCellStyle.FINE_DOTS

 

HSSFCellStyle.SPARSE_DOTS

 

HSSFCellStyle.LESS_DOTS

 

HSSFCellStyle.LEAST_DOTS

 

HSSFCellStyle.BRICKS

 

HSSFCellStyle.BIG_SPOTS

 

HSSFCellStyle.THICK_FORWARD_DIAG

 

HSSFCellStyle.THICK_BACKWARD_DIAG

 

HSSFCellStyle.THICK_VERT_BANDS

 

HSSFCellStyle.THICK_HORZ_BANDS

 

HSSFCellStyle.THIN_HORZ_BANDS

 

HSSFCellStyle.THIN_VERT_BANDS

 

HSSFCellStyle.THIN_BACKWARD_DIAG

 

HSSFCellStyle.THIN_FORWARD_DIAG

 

HSSFCellStyle.SQUARES

 

HSSFCellStyle.DIAMONDS

上边罗列一下图案样式及其相应的值:

因此那张表,你将很简单找到自个儿供给的体裁,不用再去3个三个推断了。

图案样式

常量

 

HSSFCellStyle.NO_FILL

 

HSSFCellStyle.ALT_BARS

 

HSSFCellStyle.FINE_DOTS

 

HSSFCellStyle.SPARSE_DOTS

 

HSSFCellStyle.LESS_DOTS

 

HSSFCellStyle.LEAST_DOTS

 

HSSFCellStyle.BRICKS

 

HSSFCellStyle.BIG_SPOTS

 

HSSFCellStyle.THICK_FORWARD_DIAG

 

HSSFCellStyle.THICK_BACKWARD_DIAG

 

HSSFCellStyle.THICK_VERT_BANDS

 

HSSFCellStyle.THICK_HORZ_BANDS

 

HSSFCellStyle.THIN_HORZ_BANDS

 

HSSFCellStyle.THIN_VERT_BANDS

 

HSSFCellStyle.THIN_BACKWARD_DIAG

 

HSSFCellStyle.THIN_FORWARD_DIAG

 

HSSFCellStyle.SQUARES

 

HSSFCellStyle.DIAMONDS

 

通过那张表,你将很不难找到本人索要的体制,不用再去多少个一个困惑了。

相关范例请参见NPOI
1.2正式版
中的ColorfullMatrixTable和FillBackgroundInXls。

 

 

连带范例请参见NPOI
1.2正式版
中的ColorfullMatrixTable和FillBackgroundInXls。

NPOI
1.2教程
 –
2.2.7 设置单元格的上涨幅度和中度

 

作者:Tony Qu

NPOI 1.2学科 – 2.2.7
设置单元格的大幅和中度

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

作者:Tony Qu

 

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

在Excel中,单元格的上升幅度其实正是列的增加率,因为Excel要是这一列的单元格的拉长率肯定一致。所以要设置单元格的小幅度,大家就得从列的宽度出手,HSSFSheet有个点子叫SetColumnWidth,共有四个参数:二个是列的目录(从0开首),三个是上涨幅度。

 

以后一经你要安装B列的增加率,就足以用上面包车型地铁代码:

在Excel中,单元格的大幅度其实正是列的增幅,因为Excel若是这一列的单元格的上涨幅度肯定一致。所以要安装单元格的上升幅度,我们就得从列的上升幅度入手,HSSFSheet有个办法叫SetColumnWidth,共有三个参数:一个是列的目录(从0起初),3个是大幅度。

HSSFWorkbookhssfworkbook =newHSSFWorkbook();

今昔假设你要设置B列的增长幅度,就能够用上边包车型大巴代码:

HSSFSheetsheet1 = hssfworkbook.CreateSheet(“Sheet1”);

HSSFWorkbook hssfworkbook = new HSSFWorkbook();

sheet1.SetColumnWidth(1,100 * 256);

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);

那里您会发觉叁个有意思的风貌,SetColumnWidth的第三个参数要加倍256,那是怎么回事呢?其实,这一个参数的单位是5/10陆拾一个字符宽度,也正是说,那里是把B列的急剧设置为了9五个字符。

sheet1.SetColumnWidth(1, 100 * 256);

刚刚说的是怎样设置,那怎么着去读取一个列的宽窄呢?直接用GetColumnWidth方法,这么些方法只有2个参数,那正是列的索引号。如下所示:

此处您会发觉2个有趣的场合,SetColumnWidth的第二个参数要倍加256,那是怎么回事呢?其实,那么些参数的单位是5/105几个字符宽度,也便是说,那里是把B列的肥瘦设置为了9四个字符。

int col1width = sheet1.GetColumnWidth(1);

刚才说的是哪些设置,那什么去读取多个列的宽度呢?直接用GetColumnWidth方法,这些办法唯有3个参数,那正是列的索引号。如下所示:

 

int col1width = sheet1.GetColumnWidth(1);

说完宽度,我们的话中度,在Excel中,每一行的万丈也是讲求一律的,所以设置单元格的中度,其实正是设置行的万丈,所以有关的属性也相应在HSSFRow上,它就是HSSFRow.Height和HeightInPoints,那七个属性的分别在于HeightInPoints的单位是点,而Height的单位是3/伍十六个点,所以Height的值永远是HeightInPoints的20倍。

 

要设置第①行的中度,能够用如下代码:

说完宽度,大家的话高度,在Excel中,每一行的莫斯中国科学技术大学学也是讲求一律的,所以设置单元格的惊人,其实就是设置行的可观,所以有关的本性也理应在HSSFRow上,它正是HSSFRow.Height和HeightInPoints,那五个天性的差距在于HeightInPoints的单位是点,而Height的单位是八分之四0个点,所以Height的值永远是HeightInPoints的20倍。

sheet1.CreateRow(0).Height= 200*20;

要设置第1行的中度,可以用如下代码:

或者

sheet1.CreateRow(0).Height = 200*20;

sheet1.CreateRow(0).HeightInPoints= 200;

或者

比方要取得某一行的行高,可以一贯拿HSSFRow.Height属性的重临值。

sheet1.CreateRow(0).HeightInPoints = 200;

 

若果要赢得某一行的行高,能够平昔拿HSSFRow.Height属性的重返值。

您大概认为一行一行设置行高可能一列一列设置列宽很艰巨,那你能够设想使用HSSFSheet.DefaultColumnWidth、HSSFSheet.DefaultRowHeight和HSSFSheet.DefaultRowHeightInPoints属性。

 

一经设置了这个属性,假使某一行依然某一列没有安装宽度,就会接纳私下认可宽度或可观。代码如下:

您恐怕认为一行一行设置行高也许一列一列设置列宽很麻烦,那您能够考虑选拔HSSFSheet.DefaultColumnWidth、HSSFSheet.DefaultRowHeight和HSSFSheet.DefaultRowHeightInPoints属性。

sheet1.DefaultColumnWidth=100*256;

比方设置了那么些属性,假使某一行依然某一列没有安装宽度,就会动用暗中认可宽度或可观。代码如下:

sheet1.DefaultRowHeight=30*20;

sheet1.DefaultColumnWidth=100*256;

 

sheet1.DefaultRowHeight=30*20;

连锁范例请见NPOI
1.2正式版
中的SetWidthAndHeightInXls项目

 

 

有关范例请见NPOI
1.2正式版
中的SetWidthAndHeightInXls项目

2.3.1用NPOI操作EXCEL--基本总括

 

从那节初步,大家将开始学习Excel高级一点的效率–公式。为某些单元格钦点公式后,单元格中的类容将依照公式总计得出,如图:

2.3.1
用NPOI操作EXCEL--基本总结

图中装置的是三个中坚表明式”1+2*3”,单元格A1上校显得此表达式总括的结果”7”,如图所示。对应的C#转移代码也非常粗略,如下:

从那节开头,我们将起来学习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);

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);

一致,NPOI也支撑单元格引用类型的公式设置,如下图中的C1=A1*B1。

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的单元格命名规则来的。

cel3.SetCellFormula(“A1*B1”);

 

是否相当粗略吗?但要注意,在运用NPOI写程序时,行和列的计数都是从0开头盘算的,但在设置公式时又是遵照Excel的单元格命名规则来的。

2.3.2用NPOI操作EXCEL--SUM函数

 

那节大家初始学习Excel中最常用的函数—Sum求和函数。

2.3.2
用NPOI操作EXCEL--SUM函数

第①,大家先看一上最简单易行的Sum函数:Sum(num1,num2,…)。使用效益如图

那节大家起初学习Excel中最常用的函数—Sum求和函数。

图中的E1=Sum(A1,C1)表示将A1与C1的和填充在E1处,与公式”E1=A1+C1”等效。对应的变迁代码与上一节中的基本总括公式类似:

第贰,大家先看一上最不难易行的Sum函数:Sum(num1,num2,…)。使用效益如图

 

图中的E1=Sum(A1,C1)表示将A1与C1的和填充在E1处,与公式”E1=A1+C1”等效。对应的扭转代码与上一节中的基本计算公式类似:

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);
HSSFCell celSum1 = row1.CreateCell(3);
HSSFCell celSum2 = row1.CreateCell(4);
HSSFCell celSum3 = row1.CreateCell(5);

 

cel1.SetCellValue(1);
cel2.SetCellValue(2);
cel3.SetCellValue(3);
celSum2.SetCellFormula(“sum(A1,C1)”);

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);
HSSFCell celSum1 = row1.CreateCell(3);
HSSFCell celSum2 = row1.CreateCell(4);
HSSFCell celSum3 = row1.CreateCell(5);

 当然,把每二个单元格作为Sum函数的参数很不难精通,但假诺供给和的单元格很多,那么公式就会很短,既不便宜阅读也不方便人民群众书写。所以Excel提供了其它一种五个单元格求和的写法:

cel1.SetCellValue(1);
cel2.SetCellValue(2);
cel3.SetCellValue(3);
celSum2.SetCellFormula(“sum(A1,C1)”);

如上海体育场所中的“Sum(A1:C1)”表示求从A1到C1全数单元格的和,相当于A1+B1+C1。
对应的代码为:

 当然,把每2个单元格作为Sum函数的参数很简单理解,但万一供给和的单元格很多,那么公式就会很短,既不便宜阅读也不便宜书写。所以Excel提供了此外一种多个单元格求和的写法:

 

如上海体育场面中的“Sum(A1:C1)”表示求从A1到C1持有单元格的和,也正是A1+B1+C1。
对应的代码为:

celSum1.SetCellFormula(“sum(A1:C1)”);

 

末尾,还有一种求和的主意。就是先定义三个区域,如”range1”,然后再安装Sum(range1),此时将计算区域中颇具单元格的和。
概念区域的代码为:

celSum1.SetCellFormula(“sum(A1:C1)”);

HSSFName range = hssfworkbook.CreateName();
range.Reference = “Sheet1!$A1:$C1”;
range.NameName = “range1”;

终极,还有一种求和的点子。正是先定义一个区域,如”range1”,然后再设置Sum(range1),此时将总计区域中持有单元格的和。
概念区域的代码为:

施行此代码后的Excel文件将在的公式菜单下的名目管理器(Excel二零零五的食谱路径,2004稍有区别)中看出如下区域定义:
 
给单元格F1丰硕公式:

HSSFName range = hssfworkbook.CreateName();
range.Reference = “Sheet1!$A1:$C1”;
range.NameName = “range1”;

celSum3.SetCellFormula(“sum(range1)”);

施行此代码后的Excel文件将在的公式菜单下的名目管理器(Excel2005的食谱路径,二〇〇一稍有例外)中看出如下区域定义:
 
给单元格F1丰硕公式:

变动的Excel如下图所示:
 

celSum3.SetCellFormula(“sum(range1)”);

 

变更的Excel如下图所示:
 

2.3.3用NPOI操作EXCEL--日期函数

 

Excel中有万分丰盛的日期处理函数,在NPOI中相同拿到了很好的帮忙。如下图:
相应的与方今的宗旨公式设置类似:

2.3.3
用NPOI操作EXCEL--日期函数

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);
HSSFRow row1 = sheet1.CreateRow(0);
HSSFRow row2 = sheet1.CreateRow(1);
row1.CreateCell(0).SetCellValue(“姓名”);
row1.CreateCell(1).SetCellValue(“到场工时”);
row1.CreateCell(2).SetCellValue(“当先天子”);
row1.CreateCell(3).SetCellValue(“工时限制”);

Excel中有卓殊丰富的日子处理函数,在NPOI中同样赢得了很好的协助。如下图:
相应的与后面包车型大巴大旨公式设置类似:

HSSFCell cel1 = row2.CreateCell(0);
HSSFCell cel2 = row2.CreateCell(1);
HSSFCell cel3 = row2.CreateCell(2);
HSSFCell cel4 = row2.CreateCell(3);

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);
HSSFRow row1 = sheet1.CreateRow(0);
HSSFRow row2 = sheet1.CreateRow(1);
row1.CreateCell(0).SetCellValue(“姓名”);
row1.CreateCell(1).SetCellValue(“加入工时”);
row1.CreateCell(2).SetCellValue(“当今天子”);
row1.CreateCell(3).SetCellValue(“工作时间限制”);

cel1.SetCellValue(“aTao.Xiang”);
cel2.SetCellValue(new DateTime(2004, 7, 1));
cel3.SetCellFormula(“TODAY()”);
cel4.SetCellFormula(“CONCATENATE(DATEDIF(B2,TODAY(),\”y\”),\”年\”,DATEDIF(B2,TODAY(),\”ym\”),\”个月\”)”);

HSSFCell cel1 = row2.CreateCell(0);
HSSFCell cel2 = row2.CreateCell(1);
HSSFCell cel3 = row2.CreateCell(2);
HSSFCell cel4 = row2.CreateCell(3);

//在poi中国和东瀛期是以double类型表示的,所以要格式化
HSSFCellStyle cellStyle = hssfworkbook.CreateCellStyle();
HSSFDataFormat format = hssfworkbook.CreateDataFormat();
cellStyle.DataFormat = format.GetFormat(“yyyy-m-d”);

cel1.SetCellValue(“aTao.Xiang”);
cel2.SetCellValue(new DateTime(2004, 7, 1));
cel3.SetCellFormula(“TODAY()”);
cel4.SetCellFormula(“CONCATENATE(DATEDIF(B2,TODAY(),\”y\”),\”年\”,DATEDIF(B2,TODAY(),\”ym\”),\”个月\”)”);

cel2.CellStyle = cellStyle;
cel3.CellStyle = cellStyle;

//在poi中国和日本期是以double类型表示的,所以要格式化
HSSFCellStyle cellStyle = hssfworkbook.CreateCellStyle();
HSSFDataFormat format = hssfworkbook.CreateDataFormat();
cellStyle.DataFormat = format.GetFormat(“yyyy-m-d”);

下边对上例中用到的多少个根本函数作一些证实:
TODAY():取妥善前几天期;
DATEDIF(B2,TODAY(),”y”):取得B2单元格的日子与今天期以年为单位的年月距离。(“Y”:表示以年为单位,”m”表示以月为单位;”d”表示以天为单位);
CONCATENATE(str1,str2,…):连接字符串。

cel2.CellStyle = cellStyle;
cel3.CellStyle = cellStyle;

除此以外附上Excel中常用的日子函数列表,只须求将此句代码作适当修改即可:

上面对上例中用到的多少个相当重要函数作一些表达:
TODAY():取妥当今天子;
DATEDIF(B2,TODAY(),”y”):取得B2单元格的日子与明日期以年为单位的时光间隔。(“Y”:表示以年为单位,”m”表示以月为单位;”d”表示以天为单位);
CONCATENATE(str1,str2,…):连接字符串。

cel4.SetCellFormula(“CONCATENATE(DATEDIF(B2,TODAY(),\”y\”),\”年\”,DATEDIF(B2,TODAY(),\”ym\”),\”个月\”)”);

其它附上Excel中常用的日子函数列表,只需求将此句代码作适当修改即可:

函数名

函数说明

语法

DATE

返回代表特定日期的系列数。

DATE(year,month,day)

DATEDIF

计算两个日期之间的天数、月数或年数。

DATEDIF(start_date,end_date,unit)

DATEVALUE

函数 DATEVALUE的主要功能是将以文字表示的日期转换成一个系列数。

DATEVALUE(date_text)

DAY

返回以系列数表示的某日期的天数,用整数 1到31表示。

DAY(serial_number)

DAYS360

按照一年 360天的算法(每个月以 30天计,一年共计 12 个月),返回两日期间相差的天数。

DAYS360(start_date,end_date,method)

EDATE

返回指定日期 (start_date)之前或之后指定月份数的日期系列数。使用函数 EDATE可以计算与发行日处于一月中同一天的到期日的日期。

EDATE(start_date,months)

EOMONTH

返回 start-date之前或之后指定月份中最后一天的系列数。用函数 EOMONTH可计算特定月份中最后一天的时间系列数,用于证券的到期日等计算。

EOMONTH(start_date,months)

HOUR

返回时间值的小时数。即一个介于 0 (12:00 A.M.)到 23 (11:00 P.M.)之间的整数。

HOUR(serial_number)

MINUTE

返回时间值中的分钟。即一个介于 0到 59之间的整数。

MINUTE(serial_number)

MONTH

返回以系列数表示的日期中的月份。月份是介于 1(一月)和 12(十二月)之间的整数。

MONTH(serial_number)

NETWORKDAYS

返回参数 start-data和 end-data之间完整的工作日数值。工作日不包括周末和专门指定的假期

NETWORKDAYS(start_date,end_date,holidays)

NOW

返回当前日期和时间所对应的系列数。

NOW( )

SECOND

返回时间值的秒数。返回的秒数为 0至 59之间的整数。

SECOND(serial_number)

TIME

返回某一特定时间的小数值,函数 TIME返回的小数值为从 0到 0.99999999 之间的数值,代表从 0:00:00 (12:00:00 A.M)到 23:59:59 (11:59:59 P.M)之间的时间。

TIME(hour,minute,second)

TIMEVALUE

返回由文本串所代表的时间的小数值。该小数值为从 0到 0.999999999的数值,代表从0:00:00 (12:00:00 AM)到 23:59:59 (11:59:59 PM)之间的时间。

TIMEVALUE(time_text)

TODAY

返回当前日期的系列数,系列数是 Microsoft Excel用于日期和时间计算的日期-时间代码。

TODAY( )

WEEKDAY

返回某日期为星期几。默认情况下,其值为1(星期天)到 7(星期六)之间的整数。

WEEKDAY(serial_number,return_type)

WEEKNUM

返回一个数字,该数字代表一年中的第几周。

WEEKNUM(serial_num,return_type)

WORKDAY

返回某日期(起始日期)之前或之后相隔指定工作日的某一日期的日期值。工作日不包括周末和专门指定的假日。

WORKDAY(start_date,days,holidays)

YEAR

返回某日期的年份。返回值为 1900到 9999之间的整数。

YEAR(serial_number)

YEARFRAC

返回 start_date和 end_date之间的天数占全年天数的百分比。

YEARFRAC(start_date,end_date,basis)

cel4.SetCellFormula(“CONCATENATE(DATEDIF(B2,TODAY(),\”y\”),\”年\”,DATEDIF(B2,TODAY(),\”ym\”),\”个月\”)”);

 

函数名

函数说明

语法

DATE

返回代表特定日期的系列数。

DATE(year,month,day)

DATEDIF

计算两个日期之间的天数、月数或年数。

DATEDIF(start_date,end_date,unit)

DATEVALUE

函数 DATEVALUE 的主要功能是将以文字表示的日期转换成一个系列数。

DATEVALUE(date_text)

DAY

返回以系列数表示的某日期的天数,用整数 1 到 31 表示。

DAY(serial_number)

DAYS360

按照一年 360 天的算法(每个月以 30 天计,一年共计 12 个月),返回两日期间相差的天数。

DAYS360(start_date,end_date,method)

EDATE

返回指定日期 (start_date) 之前或之后指定月份数的日期系列数。使用函数 EDATE 可以计算与发行日处于一月中同一天的到期日的日期。

EDATE(start_date,months)

EOMONTH

返回 start-date 之前或之后指定月份中最后一天的系列数。用函数 EOMONTH 可计算特定月份中最后一天的时间系列数,用于证券的到期日等计算。

EOMONTH(start_date,months)

HOUR

返回时间值的小时数。即一个介于 0 (12:00 A.M.) 到 23 (11:00 P.M.) 之间的整数。

HOUR(serial_number)

MINUTE

返回时间值中的分钟。即一个介于 0 到 59 之间的整数。

MINUTE(serial_number)

MONTH

返回以系列数表示的日期中的月份。月份是介于 1(一月)和 12(十二月)之间的整数。

MONTH(serial_number)

NETWORKDAYS

返回参数 start-data 和 end-data 之间完整的工作日数值。工作日不包括周末和专门指定的假期

NETWORKDAYS(start_date,end_date,holidays)

NOW

返回当前日期和时间所对应的系列数。

NOW( )

SECOND

返回时间值的秒数。返回的秒数为 0 至 59 之间的整数。

SECOND(serial_number)

TIME

返回某一特定时间的小数值,函数 TIME 返回的小数值为从 0 到 0.99999999 之间的数值,代表从 0:00:00 (12:00:00 A.M) 到 23:59:59 (11:59:59 P.M) 之间的时间。

TIME(hour,minute,second)

TIMEVALUE

返回由文本串所代表的时间的小数值。该小数值为从 0 到 0.999999999 的数值,代表从 0:00:00 (12:00:00 AM) 到 23:59:59 (11:59:59 PM) 之间的时间。

TIMEVALUE(time_text)

TODAY

返回当前日期的系列数,系列数是 Microsoft Excel 用于日期和时间计算的日期-时间代码。

TODAY( )

WEEKDAY

返回某日期为星期几。默认情况下,其值为 1(星期天)到 7(星期六)之间的整数。

WEEKDAY(serial_number,return_type)

WEEKNUM

返回一个数字,该数字代表一年中的第几周。

WEEKNUM(serial_num,return_type)

WORKDAY

返回某日期(起始日期)之前或之后相隔指定工作日的某一日期的日期值。工作日不包括周末和专门指定的假日。

WORKDAY(start_date,days,holidays)

YEAR

返回某日期的年份。返回值为 1900 到 9999 之间的整数。

YEAR(serial_number)

YEARFRAC

返回 start_date 和 end_date 之间的天数占全年天数的百分比。

YEARFRAC(start_date,end_date,basis)

 

 

2.3.4用NPOI操作EXCEL--字符串函数

 

      这一节大家起始学习Excel另一类万分广阔的函数—字符串函数。在Excel中提供了卓殊丰盛的字符串函数,在NPOI中一样赢得了很好的支撑。
一 、 大小写转换类函数       LOWELAND(String):将一个文字串中的全数大写字母转换为小写字母。
      UPPEQX56(String):将文件转换来大写方式。
      PROPESportage(String):将文字串的首字母及任何非字母字符之后的首字母转换到大写。将其余的假名转换来小写。
      对应的C#代码与前几节讲的安装公式的代码类似:

2.3.4
用NPOI操作EXCEL--字符串函数

**HSSFRow row1 = sheet1.CreateRow(0);
row1.CreateCell(0).SetCellValue(“待操作字符串”);
row1.CreateCell(1).SetCellValue(“操作函数”);
row1.CreateCell(2).SetCellValue(“操作结果”);

      这一节我们起初学习Excel另一类非日常见的函数—字符串函数。
在Excel中提供了至极丰硕的字符串函数,在NPOI中千篇一律收获了很好的支撑。
1、 大小写转换类函数       LOWE奥德赛(String):将叁个文字串中的全数大写字母转换为小写字母。
      UPPE翼虎(String):将文件转换到大写格局。
      PROPETucson(String):将文字串的首字母及任何非字母字符之后的首字母转换到大写。将别的的字母转换来小写。
      对应的C#代码与前几节讲的安装公式的代码类似:

HSSFRow row2 = sheet1.CreateRow(1);
row2.CreateCell(0).SetCellValue(“This is a NPOI example!”);
row2.CreateCell(1).SetCellValue(“LOWER(A2)”);
//将此句中的“LOWEXC90(A2)”换到UPPE景逸SUV (A2)、PROPE冠道 (A2)能够看到差异成效。
row2.CreateCell(2).SetCellFormula(“LOWER(A2)”);**

**HSSFRow row1 = sheet1.CreateRow(0);
row1.CreateCell(0).SetCellValue(“待操作字符串”);
row1.CreateCell(1).SetCellValue(“操作函数”);
row1.CreateCell(2).SetCellValue(“操作结果”);

贰 、 取出字符串中的部分字符
      LEFT(text,num_chars):LEFT(text,num_chars)当中Text是包含要提取字符的文本串。Num_chars内定要由LEFT 所提取的字符数。

HSSFRow row2 = sheet1.CreateRow(1);
row2.CreateCell(0).SetCellValue(“This is a NPOI example!”);
row2.CreateCell(1).SetCellValue(“LOWER(A2)”);
//将此句中的“LOWE中华V(A2)”换来UPPE路虎极光 (A2)、PROPE奥迪Q5 (A2)能够看到分化效用。
row2.CreateCell(2).SetCellFormula(“LOWER(A2)”);**

      MID(text,start_num,num_chars):MID(text,start_num,num_chars)个中Text是富含要提取字符的文本串。Start_num是文件中要提取的率先个字符的职分,num_chars表示要提取的字符的数。

二 、 取出字符串中的部分字符
      LEFT(text,num_chars):LEFT(text,num_chars)当中Text是含有要提取字符的文本串。Num_chars钦命要由
LEFT 所提取的字符数。

      RIGHT(text,num_chars):RIGHT(text,num_chars)其中Text是带有要提取字符的文本串。Num_chars内定希望卡宴IGHT 提取的字符数。
      代码与地点类似,就不写了。

      MID(text,start_num,num_chars):MID(text,start_num,num_chars)当中Text是富含要提取字符的文本串。Start_num是文件中要提取的首先个字符的职位,num_chars表示要提取的字符的数。

叁 、 去除字符串的空域       T奇骏IM(text):当中Text为必要免去在那之中空格的公文。必要专注的是,与C#中的Trim差别,Excel中的Trim函数不仅会去除字符串头尾的字符,字符串中的多余字符也会去除,单词之间只会保留一个空格。

      RIGHT(text,num_chars):RIGHT(text,num_chars)在那之中Text是带有要提取字符的文本串。Num_chars钦定希望
LX570IGHT 提取的字符数。
      代码与地点类似,就不写了。

四 、 字符串的可比
      EXACT(text1,text2):相比较七个字符串是或不是等于,区分轻重缓急写。

③ 、 去除字符串的空域       T安德拉IM(text):在那之中Text为索要排除当中空格的文本。供给专注的是,与C#中的Trim分裂,Excel中的Trim函数不仅会去除字符串头尾的字符,字符串中的多余字符也会删除,单词之间只会保留叁个空格。

      执行效果如下:

肆 、 字符串的相比较
      EXACT(text1,text2):相比较多个字符串是还是不是等于,区分轻重缓急写。

      在此只简容易单的讲了须臾间常用的函数,Excel中还有好多的字符串函数,在此附上,读者能够3个三个去测试。

      执行效果如下:

函数名

函数说明

语法

ASC

将字符串中的全角(双字节)英文字母更改为半角(单字节)字符。

ASC(text)

CHAR

返回对应于数字代码的字符,函数 CHAR可将其他类型计算机文件中的代码转换为字符。

CHAR(number)

CLEAN

删除文本中不能打印的字符。对从其他应用程序中输入的字符串使用 CLEAN函数,将删除其中含有的当前操作系统无法打印的字符。例如,可以删除通常出现在数据文件头部或尾部、无法打印的低级计算机代码。

CLEAN(text)

CODE

返回文字串中第一个字符的数字代码。返回的代码对应于计算机当前使用的字符集。

CODE(text)

CONCATENATE

将若干文字串合并到一个文字串中。

CONCATENATE (text1,text2,…)

DOLLAR

依照货币格式将小数四舍五入到指定的位数并转换成文字。

DOLLAR 或 RMB(number,decimals)

EXACT

该函数测试两个字符串是否完全相同。如果它们完全相同,则返回 TRUE;否则,返回FALSE。函数 EXACT 能区分大小写,但忽略格式上的差异。利用函数 EXACT可以测试输入文档内的文字。

EXACT(text1,text2)

FIND

FIND 用于查找其他文本串(within_text)内的文本串(find_text),并从 within_text的首字符开始返回 find_text的起始位置编号。

FIND(find_text,within_text,start_num)

FIXED

按指定的小数位数进行四舍五入,利用句点和逗号,以小数格式对该数设置格式,并以文字串形式返回结果。

FIXED(number,decimals,no_commas)

JIS

将字符串中的半角(单字节)英文字母或片假名更改为全角(双字节)字符。

JIS(text)

LEFT

LEFT 基于所指定的字符数返回文本串中的第一个或前几个字符。
LEFTB 基于所指定的字节数返回文本串中的第一个或前几个字符。此函数用于双字节字符。

LEFT(text,num_chars)
LEFTB(text,num_bytes)

LEN

LEN 返回文本串中的字符数。
LENB 返回文本串中用于代表字符的字节数。此函数用于双字节字符。

LEN(text)
LENB(text)

LOWER

将一个文字串中的所有大写字母转换为小写字母。

LOWER(text)

MID

MID 返回文本串中从指定位置开始的特定数目的字符,该数目由用户指定。
MIDB 返回文本串中从指定位置开始的特定数目的字符,该数目由用户指定。此函数用于双字节字符。

MID(text,start_num,num_chars)
MIDB(text,start_num,num_bytes)

PHONETIC

提取文本串中的拼音(furigana)字符。

PHONETIC(reference)

PROPER

将文字串的首字母及任何非字母字符之后的首字母转换成大写。将其余的字母转换成小写。

PROPER(text)

REPLACE

REPLACE 使用其他文本串并根据所指定的字符数替换某文本串中的部分文本。
REPLACEB 使用其他文本串并根据所指定的字符数替换某文本串中的部分文本。此函数专为双字节字符使用。

REPLACE(old_text,start_num,num_chars,new_text)
REPLACEB(old_text,start_num,num_bytes,new_text)

REPT

按照给定的次数重复显示文本。可以通过函数 REPT来不断地重复显示某一文字串,对单元格进行填充。

REPT(text,number_times)

RIGHT

RIGHT 根据所指定的字符数返回文本串中最后一个或多个字符。
RIGHTB 根据所指定的字符数返回文本串中最后一个或多个字符。此函数用于双字节字符。

RIGHT(text,num_chars)
RIGHTB(text,num_bytes)

SEARCH

SEARCH 返回从 start_num开始首次找到特定字符或文本串的位置上特定字符的编号。使用 SEARCH可确定字符或文本串在其他文本串中的位置,这样就可使用 MID或 REPLACE函数更改文本。
SEARCHB 也可在其他文本串(within_text)中查找文本串(find_text),并返回 find_text的起始位置编号。此结果是基于每个字符所使用的字节数,并从 start_num开始的。此函数用于双字节字符。此外,也可使用 FINDB在其他文本串中查找文本串。

SEARCH(find_text,within_text,start_num)
SEARCHB(find_text,within_text,start_num)

SUBSTITUTE

在文字串中用 new_text替代old_text。如果需要在某一文字串中替换指定的文本,请使用函数 SUBSTITUTE;如果需要在某一文字串中替换指定位置处的任意文本,请使用函数REPLACE。

SUBSTITUTE(text,old_text,new_text,instance_num)

T

将数值转换成文本。

T(value)

TEXT

将一数值转换为按指定数字格式表示的文本。

TEXT(value,format_text)

TRIM

除了单词之间的单个空格外,清除文本中所有的空格。在从其他应用程序中获取带有不规则空格的文本时,可以使用函数 TRIM。

TRIM(text)

UPPER

将文本转换成大写形式。

UPPER(text)

VALUE

将代表数字的文字串转换成数字。

VALUE(text)

WIDECHAR

将单字节字符转换为双字节字符。

WIDECHAR(text)

YEN

使用¥(日圆)货币格式将数字转换成文本,并对指定位置后的数字四舍五入。

YEN(number,decimals)

      在此只简单的说了须臾间常用的函数,Excel中还有很多的字符串函数,在此附上,读者可以三个贰个去测试。

 

函数名

函数说明

语法

ASC

将字符串中的全角(双字节)英文字母更改为半角(单字节)字符。

ASC(text)

CHAR

返回对应于数字代码的字符,函数 CHAR 可将其他类型计算机文件中的代码转换为字符。

CHAR(number)

CLEAN

删除文本中不能打印的字符。对从其他应用程序中输入的字符串使用 CLEAN 函数,将删除其中含有的当前操作系统无法打印的字符。例如,可以删除通常出现在数据文件头部或尾部、无法打印的低级计算机代码。

CLEAN(text)

CODE

返回文字串中第一个字符的数字代码。返回的代码对应于计算机当前使用的字符集。

CODE(text)

CONCATENATE

将若干文字串合并到一个文字串中。

CONCATENATE (text1,text2,…)

DOLLAR

依照货币格式将小数四舍五入到指定的位数并转换成文字。

DOLLAR 或 RMB(number,decimals)

EXACT

该函数测试两个字符串是否完全相同。如果它们完全相同,则返回 TRUE;否则,返回 FALSE。函数 EXACT 能区分大小写,但忽略格式上的差异。利用函数 EXACT 可以测试输入文档内的文字。

EXACT(text1,text2)

FIND

FIND 用于查找其他文本串 (within_text) 内的文本串 (find_text),并从 within_text 的首字符开始返回 find_text 的起始位置编号。

FIND(find_text,within_text,start_num)

FIXED

按指定的小数位数进行四舍五入,利用句点和逗号,以小数格式对该数设置格式,并以文字串形式返回结果。

FIXED(number,decimals,no_commas)

JIS

将字符串中的半角(单字节)英文字母或片假名更改为全角(双字节)字符。

JIS(text)

LEFT

LEFT 基于所指定的字符数返回文本串中的第一个或前几个字符。
LEFTB 基于所指定的字节数返回文本串中的第一个或前几个字符。此函数用于双字节字符。

LEFT(text,num_chars)
LEFTB(text,num_bytes)

LEN

LEN 返回文本串中的字符数。
LENB 返回文本串中用于代表字符的字节数。此函数用于双字节字符。

LEN(text)
LENB(text)

LOWER

将一个文字串中的所有大写字母转换为小写字母。

LOWER(text)

MID

MID 返回文本串中从指定位置开始的特定数目的字符,该数目由用户指定。
MIDB 返回文本串中从指定位置开始的特定数目的字符,该数目由用户指定。此函数用于双字节字符。

MID(text,start_num,num_chars)
MIDB(text,start_num,num_bytes)

PHONETIC

提取文本串中的拼音 (furigana) 字符。

PHONETIC(reference)

PROPER

将文字串的首字母及任何非字母字符之后的首字母转换成大写。将其余的字母转换成小写。

PROPER(text)

REPLACE

REPLACE 使用其他文本串并根据所指定的字符数替换某文本串中的部分文本。
REPLACEB 使用其他文本串并根据所指定的字符数替换某文本串中的部分文本。此函数专为双字节字符使用。

REPLACE(old_text,start_num,num_chars,new_text)
REPLACEB(old_text,start_num,num_bytes,new_text)

REPT

按照给定的次数重复显示文本。可以通过函数 REPT 来不断地重复显示某一文字串,对单元格进行填充。

REPT(text,number_times)

RIGHT

RIGHT 根据所指定的字符数返回文本串中最后一个或多个字符。
RIGHTB 根据所指定的字符数返回文本串中最后一个或多个字符。此函数用于双字节字符。

RIGHT(text,num_chars)
RIGHTB(text,num_bytes)

SEARCH

SEARCH 返回从 start_num 开始首次找到特定字符或文本串的位置上特定字符的编号。使用 SEARCH 可确定字符或文本串在其他文本串中的位置,这样就可使用 MID 或 REPLACE 函数更改文本。
SEARCHB 也可在其他文本串 (within_text) 中查找文本串 (find_text),并返回 find_text 的起始位置编号。此结果是基于每个字符所使用的字节数,并从 start_num 开始的。此函数用于双字节字符。此外,也可使用 FINDB 在其他文本串中查找文本串。

SEARCH(find_text,within_text,start_num)
SEARCHB(find_text,within_text,start_num)

SUBSTITUTE

在文字串中用 new_text 替代 old_text。如果需要在某一文字串中替换指定的文本,请使用函数 SUBSTITUTE;如果需要在某一文字串中替换指定位置处的任意文本,请使用函数 REPLACE。

SUBSTITUTE(text,old_text,new_text,instance_num)

T

将数值转换成文本。

T(value)

TEXT

将一数值转换为按指定数字格式表示的文本。

TEXT(value,format_text)

TRIM

除了单词之间的单个空格外,清除文本中所有的空格。在从其他应用程序中获取带有不规则空格的文本时,可以使用函数 TRIM。

TRIM(text)

UPPER

将文本转换成大写形式。

UPPER(text)

VALUE

将代表数字的文字串转换成数字。

VALUE(text)

WIDECHAR

将单字节字符转换为双字节字符。

WIDECHAR(text)

YEN

使用 ¥(日圆)货币格式将数字转换成文本,并对指定位置后的数字四舍五入。

YEN(number,decimals)

 

 

2.3.5用NPOI操作EXCEL--If函数

 

      在Excel中,IF(logical_test,value_if_true,value_if_false)用来作为逻辑判断。当中Logical_test表示计算结果为TRUE 或 FALSE 的任意值或宣布式 ;
value_if_true表示当表明式Logical_test的值为TRUE时的重临值;value_if_false表示当表明式Logical_test的值为FALSE时的再次来到值。同样在NPOI中也得以动用那么些表明式进行种种逻辑运算。如下代码分别安装了B2和D2单元格的用于逻辑判断的公式。

2.3.5
用NPOI操作EXCEL--If函数

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);

      在Excel中,IF(logical_test,value_if_true,value_if_false)用来作为逻辑判断。在那之中Logical_test表示总结结果为
TRUE 或 FALSE 的任意值或揭橥式 ;
value_if_true代表当表明式Logical_test的值为TRUE时的再次回到值;value_if_false表示当表明式Logical_test的值为FALSE时的再次来到值。同样在NPOI中也可以利用那一个表明式举办各个逻辑运算。如下代码分别设置了B2和D2单元格的用于逻辑判断的公式。

HSSFRow row1 = sheet1.CreateRow(0);
row1.CreateCell(0).SetCellValue(“姓名”);
row1.CreateCell(1).SetCellValue(“身份证号”);
row1.CreateCell(2).SetCellValue(“性别”);
row1.CreateCell(3).SetCellValue(“语文”);
row1.CreateCell(4).SetCellValue(“是还是不是合格”);

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);

HSSFRow row2 = sheet1.CreateRow(1);
row2.CreateCell(0).SetCellValue(“令狐冲”);
row2.CreateCell(1).SetCellValue(“420821198808101014”);
row2.CreateCell(2).SetCellFormula(“IF(MOD(MID(B2,18,1),2)=0,\”男\”,\”女\”)”);
row2.CreateCell(3).SetCellValue(85);
row2.CreateCell(4).SetCellFormula(“IF(D2>60,IF(D2>90,\”优秀\”,\”合格\”),\”不合格\”)”);

HSSFRow row1 = sheet1.CreateRow(0);
row1.CreateCell(0).SetCellValue(“姓名”);
row1.CreateCell(1).SetCellValue(“身份证号”);
row1.CreateCell(2).SetCellValue(“性别”);
row1.CreateCell(3).SetCellValue(“语文”);
row1.CreateCell(4).SetCellValue(“是还是不是合格”);

个中最要害的两句执行结果如下:

HSSFRow row2 = sheet1.CreateRow(1);
row2.CreateCell(0).SetCellValue(“令狐冲”);
row2.CreateCell(1).SetCellValue(“420821198808101014”);
row2.CreateCell(2).SetCellFormula(“IF(MOD(MID(B2,18,1),2)=0,\”男\”,\”女\”)”);
row2.CreateCell(3).SetCellValue(85);
row2.CreateCell(4).SetCellFormula(“IF(D2>60,IF(D2>90,\”优秀\”,\”合格\”),\”不合格\”)”);

row2.CreateCell(2).SetCellFormula(“IF(MOD(MID(B2,18,1),2)=0,\”男\”,\”女\”)”);

里头最根本的两句执行结果如下:

 

row2.CreateCell(2).SetCellFormula(“IF(MOD(MID(B2,18,1),2)=0,\”男\”,\”女\”)”);

row2.CreateCell(4).SetCellFormula(“IF(D2>60,IF(D2>90,\”优秀\”,\”合格\”),\”不合格\”)”);

 

 

row2.CreateCell(4).SetCellFormula(“IF(D2>60,IF(D2>90,\”优秀\”,\”合格\”),\”不合格\”)”);

下边分别对这多少个函数作一些认证:
      MOD(MID(B2,18,1),2):我们领略贰12人身份证号的第壹五个人表示性别,偶数为男性,奇数为女性,所以用了MID(B2,18,1)取第35个人数字(与C#中一般从0计数不一样,第二个参数是从1算起,有关MID函数的越来越多消息,请参见字符串函数),用MOD取余函数判断奇偶。在Excel中对数据类型的主宰没有C#中那么严厉,如此例中本身截取出来的是字符串,但当自家做取余运算时Excel会自动转换。
      IF(D2>60,IF(D2>90,”卓绝”,”合格”),”不及格”):那是IF的嵌套使用,表示八十八分以上为卓越,伍二十分以上为合格,不然为不合格。

 

 

下边分别对那多少个函数作一些验证:
      MOD(MID(B2,18,1),2):大家了然1拾1个人身份证号的第2五位表示性别,偶数为男性,奇数为女性,所以用了MID(B2,18,1)取第③陆个人数字(与C#中貌似从0计数分化,第1个参数是从1算起,有关MID函数的越来越多消息,请参见字符串函数),用MOD取余函数判断奇偶。在Excel中对数据类型的控制没有C#中那么严谨,如此例中本身截取出来的是字符串,但当自家做取余运算时Excel会自动转换。
      IF(D2>60,IF(D2>90,”优良”,”合格”),”但是关”):那是IF的嵌套使用,表示捌拾捌分以上为能够,63分以上为合格,否则为不及格。

2.3.6用NPOI操作EXCEL--COUNTIF和SUMIF函数

 

一、COUNTIF       这一节,大家一并来学习Excel中另一个常用的函数–COUNTIF函数,看函数名就知晓那是三个用来在做满意某条件的计数的函数。先来看一看它的语法:COUNTIF(range,criteria),参数表明如下:

2.3.6用NPOI操作EXCEL--COUNTIF和SUMIF函数

Range

需要进行读数的计数

Criteria

条件表达式,只有当满足此条件时才进行计数

一、COUNTIF       这一节,大家一块来学习Excel中另八个常用的函数–COUNTIF函数,看函数名就通晓那是一个用来在做满意某条件的计数的函数。先来看一看它的语法:COUNTIF(range,criteria),参数表达如下:

接下去看二个例证,代码如下:

Range

需要进行读数的计数

Criteria

条件表达式,只有当满足此条件时才进行计数

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);

接下去看三个例证,代码如下:

HSSFRow row1 = sheet1.CreateRow(0);
row1.CreateCell(0).SetCellValue(“姓名”);
row1.CreateCell(1).SetCellValue(“成绩”);

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);

HSSFRow row2 = sheet1.CreateRow(1);
row2.CreateCell(0).SetCellValue(“令狐冲”);
row2.CreateCell(1).SetCellValue(85);

HSSFRow row1 = sheet1.CreateRow(0);
row1.CreateCell(0).SetCellValue(“姓名”);
row1.CreateCell(1).SetCellValue(“成绩”);

HSSFRow row3 = sheet1.CreateRow(2);
row3.CreateCell(0).SetCellValue(“任盈盈”);
row3.CreateCell(1).SetCellValue(90);

HSSFRow row2 = sheet1.CreateRow(1);
row2.CreateCell(0).SetCellValue(“令狐冲”);
row2.CreateCell(1).SetCellValue(85);

HSSFRow row4 = sheet1.CreateRow(3);
row4.CreateCell(0).SetCellValue(“任我行”);
row4.CreateCell(1).SetCellValue(70);

HSSFRow row3 = sheet1.CreateRow(2);
row3.CreateCell(0).SetCellValue(“任盈盈”);
row3.CreateCell(1).SetCellValue(90);

HSSFRow row5 = sheet1.CreateRow(4);
row5.CreateCell(0).SetCellValue(“左冷婵”);
row5.CreateCell(1).SetCellValue(45);

HSSFRow row4 = sheet1.CreateRow(3);
row4.CreateCell(0).SetCellValue(“任我行”);
row4.CreateCell(1).SetCellValue(70);

HSSFRow row6 = sheet1.CreateRow(5);
row6.CreateCell(0).SetCellValue(“岳不群”);
row6.CreateCell(1).SetCellValue(50);

HSSFRow row5 = sheet1.CreateRow(4);
row5.CreateCell(0).SetCellValue(“左冷婵”);
row5.CreateCell(1).SetCellValue(45);

HSSFRow row7 = sheet1.CreateRow(6);
row7.CreateCell(0).SetCellValue(“合格人数:”);
row7.CreateCell(1).SetCellFormula(“COUNTIF(B2:B6,\”>60\”)”);

HSSFRow row6 = sheet1.CreateRow(5);
row6.CreateCell(0).SetCellValue(“岳不群”);
row6.CreateCell(1).SetCellValue(50);

施行结果如下:

HSSFRow row7 = sheet1.CreateRow(6);
row7.CreateCell(0).SetCellValue(“合格人数:”);
row7.CreateCell(1).SetCellFormula(“COUNTIF(B2:B6,\”>60\”)”);

      大家得以看来,CountIf函数成功的计算出了区域“B2:B6”中培养合格的人数(那里定义成绩超乎60为合格)。

执行结果如下:

二、SUMIF

      大家得以观望,CountIf函数成功的总结出了区域“B2:B6”中作育合格的人数(那里定义成绩超乎60为合格)。

      接下去,顺便谈谈另一个与CountIF类似的函数—SumIf函数。此函数用于总括某区域内满意某条件的值的求和(CountIf是计数)。与CountIF不一致,SumIF有两个参数,语法为SumIF(criteria_range,
criteria,sum_range),各参数的验证如下:

二、SUMIF

criteria_range

条件测试区域,第二个参数Criteria中的条件将与此区域中的值进行比较

criteria

条件测试值,满足条件的对应的sum_range项将进行求和计算

sum_range

汇总数据所在区域,求和时会排除掉不满足Criteria条件的对应的项

      接下去,顺便谈谈另2个与CountIF类似的函数—SumIf函数。此函数用于总计某区域内满足某条件的值的求和(CountIf是计数)。与CountIF差异,SumIF有四个参数,语法为
SumIF(criteria_range, criteria,sum_range),各参数的表明如下:

咱俩还是以例子来加以表明:

criteria_range

条件测试区域,第二个参数Criteria中的条件将与此区域中的值进行比较

criteria

条件测试值,满足条件的对应的sum_range项将进行求和计算

sum_range

汇总数据所在区域,求和时会排除掉不满足Criteria条件的对应的项

Code
HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);

咱俩依然以例子来加以注明:

HSSFRow row1 = sheet1.CreateRow(0);
row1.CreateCell(0).SetCellValue(“姓名”);
row1.CreateCell(1).SetCellValue(“月份”);
row1.CreateCell(2).SetCellValue(“销售额”);

Code
HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);

HSSFRow row2 = sheet1.CreateRow(1);
row2.CreateCell(0).SetCellValue(“令狐冲”);
row2.CreateCell(1).SetCellValue(“一月”);
row2.CreateCell(2).SetCellValue(1000);

HSSFRow row1 = sheet1.CreateRow(0);
row1.CreateCell(0).SetCellValue(“姓名”);
row1.CreateCell(1).SetCellValue(“月份”);
row1.CreateCell(2).SetCellValue(“销售额”);

HSSFRow row3 = sheet1.CreateRow(2);
row3.CreateCell(0).SetCellValue(“任盈盈”);
row3.CreateCell(1).SetCellValue(“一月”);
row3.CreateCell(2).SetCellValue(900);

HSSFRow row2 = sheet1.CreateRow(1);
row2.CreateCell(0).SetCellValue(“令狐冲”);
row2.CreateCell(1).SetCellValue(“一月”);
row2.CreateCell(2).SetCellValue(1000);

HSSFRow row4 = sheet1.CreateRow(3);
row4.CreateCell(0).SetCellValue(“令狐冲”);
row4.CreateCell(1).SetCellValue(“二月”);
row4.CreateCell(2).SetCellValue(2000);

HSSFRow row3 = sheet1.CreateRow(2);
row3.CreateCell(0).SetCellValue(“任盈盈”);
row3.CreateCell(1).SetCellValue(“一月”);
row3.CreateCell(2).SetCellValue(900);

HSSFRow row5 = sheet1.CreateRow(4);
row5.CreateCell(0).SetCellValue(“任盈盈”);
row5.CreateCell(1).SetCellValue(“二月”);
row5.CreateCell(2).SetCellValue(1000);

HSSFRow row4 = sheet1.CreateRow(3);
row4.CreateCell(0).SetCellValue(“令狐冲”);
row4.CreateCell(1).SetCellValue(“二月”);
row4.CreateCell(2).SetCellValue(2000);

HSSFRow row6 = sheet1.CreateRow(5);
row6.CreateCell(0).SetCellValue(“令狐冲”);
row6.CreateCell(1).SetCellValue(“三月”);
row6.CreateCell(2).SetCellValue(3000);

HSSFRow row5 = sheet1.CreateRow(4);
row5.CreateCell(0).SetCellValue(“任盈盈”);
row5.CreateCell(1).SetCellValue(“二月”);
row5.CreateCell(2).SetCellValue(1000);

HSSFRow row7 = sheet1.CreateRow(6);
row7.CreateCell(0).SetCellValue(“任盈盈”);
row7.CreateCell(1).SetCellValue(“三月”);
row7.CreateCell(2).SetCellValue(1200);

HSSFRow row6 = sheet1.CreateRow(5);
row6.CreateCell(0).SetCellValue(“令狐冲”);
row6.CreateCell(1).SetCellValue(“三月”);
row6.CreateCell(2).SetCellValue(3000);

HSSFRow row8 = sheet1.CreateRow(7);
row8.CreateCell(0).SetCellValue(“令狐冲一季度销售额:”);
row8.CreateCell(2).SetCellFormula(“SUMIF(A2:A7,\”=令狐冲\”,C2:C7)”);

HSSFRow row7 = sheet1.CreateRow(6);
row7.CreateCell(0).SetCellValue(“任盈盈”);
row7.CreateCell(1).SetCellValue(“三月”);
row7.CreateCell(2).SetCellValue(1200);

HSSFRow row9 = sheet1.CreateRow(8);
row9.CreateCell(0).SetCellValue(“任盈盈一季度销售额:”);
row9.CreateCell(2).SetCellFormula(“SUMIF(A2:A7,\”=任盈盈\”,C2:C7)”);

HSSFRow row8 = sheet1.CreateRow(7);
row8.CreateCell(0).SetCellValue(“令狐冲一季度销售额:”);
row8.CreateCell(2).SetCellFormula(“SUMIF(A2:A7,\”=令狐冲\”,C2:C7)”);

执行结果如下:

HSSFRow row9 = sheet1.CreateRow(8);
row9.CreateCell(0).SetCellValue(“任盈盈一季度销售额:”);
row9.CreateCell(2).SetCellFormula(“SUMIF(A2:A7,\”=任盈盈\”,C2:C7)”);

如上航海用教室,SUMIF总结出了差别人一季度的销售额。

实践结果如下:

 

如上海体育场合,SUMIF计算出了不一样人一季度的销售额。

2.3.7用NPOI操作EXCEL--LOOKUP函数

 

      昨天,我们联合学习Excel中的查询函数--LOOKUP。其主导语法方式为LOOKUP(lookup_value,lookup_vector,result_vector)。依然以例子加以注明更易于掌握:

2.3.7
用NPOI操作EXCEL--LOOKUP函数

Code
HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);
HSSFRow row1 = sheet1.CreateRow(0);
row1.CreateCell(0).SetCellValue(“收入最低”);
row1.CreateCell(1).SetCellValue(“收入最高”);
row1.CreateCell(2).SetCellValue(“税率”);

      前天,大家一并学习Excel中的查询函数--LOOKUP。其主干语法格局为LOOKUP(lookup_value,lookup_vector,result_vector)。如故以例子加以证实更易于明白:

HSSFRow row2 = sheet1.CreateRow(1);
row2.CreateCell(0).SetCellValue(0);
row2.CreateCell(1).SetCellValue(3000);
row2.CreateCell(2).SetCellValue(0.1);

Code
HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);
HSSFRow row1 = sheet1.CreateRow(0);
row1.CreateCell(0).SetCellValue(“收入最低”);
row1.CreateCell(1).SetCellValue(“收入最高”);
row1.CreateCell(2).SetCellValue(“税率”);

HSSFRow row3 = sheet1.CreateRow(2);
row3.CreateCell(0).SetCellValue(3001);
row3.CreateCell(1).SetCellValue(10000);
row3.CreateCell(2).SetCellValue(0.2);

HSSFRow row2 = sheet1.CreateRow(1);
row2.CreateCell(0).SetCellValue(0);
row2.CreateCell(1).SetCellValue(3000);
row2.CreateCell(2).SetCellValue(0.1);

HSSFRow row4 = sheet1.CreateRow(3);
row4.CreateCell(0).SetCellValue(10001);
row4.CreateCell(1).SetCellValue(20000);
row4.CreateCell(2).SetCellValue(0.3);

HSSFRow row3 = sheet1.CreateRow(2);
row3.CreateCell(0).SetCellValue(3001);
row3.CreateCell(1).SetCellValue(10000);
row3.CreateCell(2).SetCellValue(0.2);

HSSFRow row5 = sheet1.CreateRow(4);
row5.CreateCell(0).SetCellValue(20001);
row5.CreateCell(1).SetCellValue(50000);
row5.CreateCell(2).SetCellValue(0.4);

HSSFRow row4 = sheet1.CreateRow(3);
row4.CreateCell(0).SetCellValue(10001);
row4.CreateCell(1).SetCellValue(20000);
row4.CreateCell(2).SetCellValue(0.3);

HSSFRow row6 = sheet1.CreateRow(5);
row6.CreateCell(0).SetCellValue(50001);
row6.CreateCell(2).SetCellValue(0.5);

HSSFRow row5 = sheet1.CreateRow(4);
row5.CreateCell(0).SetCellValue(20001);
row5.CreateCell(1).SetCellValue(50000);
row5.CreateCell(2).SetCellValue(0.4);

HSSFRow row8 = sheet1.CreateRow(7);
row8.CreateCell(0).SetCellValue(“收入”);
row8.CreateCell(1).SetCellValue(“税率”);

HSSFRow row6 = sheet1.CreateRow(5);
row6.CreateCell(0).SetCellValue(50001);
row6.CreateCell(2).SetCellValue(0.5);

HSSFRow row9 = sheet1.CreateRow(8);
row9.CreateCell(0).SetCellValue(7800);
row9.CreateCell(1).SetCellFormula(“LOOKUP(A9,$A$2:$A$6,$C$2:$C$6)”);

HSSFRow row8 = sheet1.CreateRow(7);
row8.CreateCell(0).SetCellValue(“收入”);
row8.CreateCell(1).SetCellValue(“税率”);

      那是二个依据薪俸查询相应税收的比率的事例。我们率先创立了差别工资距离对应税收的比率的字典,然后依照具体的报酬在字典中找出相应的税收的比率。执行后生成的Excel如下:
 
上边对各参数加以表明:
第2个参数:须求摸索的剧情,本例中指向A9单元格,也正是7800;
其次个参数:相比较对象区域,本例中的薪水须要与$A$2:$A$6中的各单元格中的值举行比较;第多个参数:查找结果区域,借使匹配到会将此区域中对应的数目重回。如本例中回到$C$2:$C$6中对应的值。
想必有人会问,字典中从未7800对应的税收的比率啊,那么Excel中怎么匹配的吧?答案是张冠李戴匹配,并且LOOKUP函数只帮助模糊匹配。Excel会在$A$2:$A$6中找小于7800的最大值,也正是A3对应的3001,然后将相应的$C$2:$C$6区域中的C3中的值再次回到,那便是终极结果0.2的由来。那下明白了呢:)

HSSFRow row9 = sheet1.CreateRow(8);
row9.CreateCell(0).SetCellValue(7800);
row9.CreateCell(1).SetCellFormula(“LOOKUP(A9,$A$2:$A$6,$C$2:$C$6)”);

VLOOKUP       此外,LOOKUP函数还有一个人表弟--VLOOKUP。两弟兄有很多相似之处,但三弟本领更大。Vlookup用相比较数与3个“表”实行比较,而不是Lookup函数的某1列或1行,并且Vlookup能够接纳使用标准查询或是模糊查询办法,而Lookup唯有模糊查询。
将上例中装置公式的代码换来:

      那是八个依据薪俸查询相应税收的比率的例子。我们先是创设了分化薪酬距离对应税收的比率的字典,然后遵照实际的工钱在字典中找出相应的税收的比率。执行后生成的Excel如下:
 
上边对各参数加以印证:
首先个参数:须求摸索的始末,本例中指向A9单元格,也便是7800;
第一个参数:相比对象区域,本例中的薪酬要求与$A$2:$A$6中的各单元格中的值进行相比;第多个参数:查找结果区域,要是同盟到会将此区域中对应的数额再次来到。如本例中回到$C$2:$C$6中对应的值。
大概有人会问,字典中平昔不7800对应的税收的比率啊,那么Excel中怎么匹配的呢?答案是歪曲匹配,并且LOOKUP函数只扶助模糊匹配。Excel会在$A$2:$A$6中找小于7800的最大值,也正是A3对应的3001,然后将相应的$C$2:$C$6区域中的C3中的值再次来到,那正是终极结果0.2的由来。那下通晓了吧:)

row9.CreateCell(1).SetCellFormula(“VLOOKUP(A9,$A$2:$C$6,3,TRUE)”);

VLOOKUP       此外,LOOKUP函数还有1位四弟--VLOOKUP。两小兄弟有为数不少相似之处,但三弟本领更大。Vlookup用相比较数与3个“表”进行相比较,而不是Lookup函数的某1列或1行,并且Vlookup可以接纳采用规范查询或是模糊查询格局,而Lookup唯有模糊查询。
将上例中安装公式的代码换来:

施行后生成的Excel样式如下:

row9.CreateCell(1).SetCellFormula(“VLOOKUP(A9,$A$2:$C$6,3,TRUE)”);

首先个参数:必要摸索的始末,那里是A9单元格;
其次个参数:须求相比较的表,那里是$A$2:$C$6,注意VLOOKUP匹配时只与表中的率先列进行匹配。
其多个参数:匹配结果对应的列序号。那里要相应的是税收的比率列,所以为3。
第多个参数:指明是不是模糊匹配。例子中的TRUE表示模糊匹配,与上例中同样。匹配到的是第壹行。假若将此参数改为FALSE,因为在表中的第二列中找不到7800,所以会报“#N/A”的预计错误。

实践后生成的Excel样式如下:

      别的,还有与VLOKUP类似的HLOOKUP。不一样的是VLOOKUP用于在报表或数值数组的首列查找钦赐的数值,并通过重回表格或数组当前行中钦命列处的数值。而HLOOKUP用于在报表或数值数组的首行查找内定的数值,并经过再次回到表格或数组当前列中钦定行处的数值。读者能够自已去品尝。

第③个参数:要求摸索的剧情,那里是A9单元格;
其次个参数:需求相比较的表,那里是$A$2:$C$6,注意VLOOKUP匹配时只与表中的率先列进行匹配。
其多少个参数:匹配结果对应的列序号。那里要相应的是税收的比率列,所以为3。
第八个参数:指明是或不是模糊匹配。例子中的TRUE表示模糊匹配,与上例中相同。匹配到的是第叁行。若是将此参数改为FALSE,因为在表中的第③列中找不到7800,所以会报“#N/A”的一个钱打二1几个结错误。

 

      其它,还有与VLOKUP类似的HLOOKUP。分歧的是VLOOKUP用于在表格或数值数组的首列查找钦命的数值,并因而再次来到表格或数组当前行中内定列处的数值。而HLOOKUP用于在报表或数值数组的首行查找钦赐的数值,并透过再次回到表格或数组当前列中钦命行处的数值。读者能够自已去尝尝。

2.3.8用NPOI操作EXCEL--随机数函数

 

      我们清楚,在超越四分之二编制程序语言中都有自由数函数。在Excel中,同样存在着如此二个函数—RAND()函数,用于生成随机数。先来看一个最简易的事例:

2.3.8
用NPOI操作EXCEL--随机数函数

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);
sheet1.CreateRow(0).CreateCell(0).SetCellFormula(“RAND()”);

      大家清楚,在一大半编制程序语言中都有私自数函数。在Excel中,同样存在着如此1个函数—RAND()函数,用于生成随机数。先来看1个最简便的事例:

RAND()函数将回来二个0-1里面包车型地铁随机数,执行后生成的Excel文件如下:

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);
sheet1.CreateRow(0).CreateCell(0).SetCellFormula(“RAND()”);

那只是最简便直接的RAND()函数的利用,只要大家稍加修改,就足以作出很两种转移。如
取0-100事先的即兴整数,可安装公式为:

RAND()函数将回来3个0-第11中学间的任意数,执行后生成的Excel文件如下:

sheet1.CreateRow(0).CreateCell(0).SetCellFormula(“int(RAND()*100)”);

那只是最简便直接的RAND()函数的行使,只要大家稍加修改,就足以作出很三种转移。如
取0-100事先的人身自由整数,可安装公式为:

取10-20里头的任意实数,可设置公式为:

sheet1.CreateRow(0).CreateCell(0).SetCellFormula(“int(RAND()*100)”);

sheet1.CreateRow(0).CreateCell(0).SetCellFormula(“rand()*(20-10)+10”);

取10-20之内的任性实数,可安装公式为:

随便小写字母:

sheet1.CreateRow(0).CreateCell(0).SetCellFormula(“rand()*(20-10)+10”);

sheet1.CreateRow(0).CreateCell(0).SetCellFormula(“CHAR(INT(RAND()*26)+97)”);

私行小写字母:

随机大写字母:

sheet1.CreateRow(0).CreateCell(0).SetCellFormula(“CHAR(INT(RAND()*26)+97)”);

sheet1.CreateRow(0).CreateCell(0).SetCellFormula(“CHAR(INT(RAND()*26)+65)”)

随意大写字母:

自由大小写字母:

sheet1.CreateRow(0).CreateCell(0).SetCellFormula(“CHAR(INT(RAND()*26)+65)”)

sheet1.CreateRow(0).CreateCell(0).SetCellFormula(“CHAR(INT(RAND()*26)+if(INT(RAND()*2)=0,65,97))”);

轻易大小写字母:

      上面几例中除去用到RAND函数以外,还用到了CHA奥德赛函数用来将ASCII码换为字母,INT函数用来取整。值得注意的是INT函数不会四舍五入,无论小数点后是稍稍都会被舍去。
      那里只是RAND函数的几个简单利用,还有许多随机数的例子都得以依据那些,再组成差异的其他函数引申出来。

sheet1.CreateRow(0).CreateCell(0).SetCellFormula(“CHAR(INT(RAND()*26)+if(INT(RAND()*2)=0,65,97))”);

 

      上边几例中除去用到RAND函数以外,还用到了CHATiggo函数用来将ASCII码换为字母,INT函数用来取整。值得注意的是INT函数不会四舍五入,无论小数点后是有些都会被舍去。
      那里只是RAND函数的多少个大约利用,还有众多随机数的事例都可以依照这一个,再组成分化的其它函数引申出来。

2.3.9用NPOI操作EXCEL--通过NPOI获得公式的再次回到值

 

      前边大家学习了经过NPOI向Excel中设置公式,那么有些读者恐怕会问:“NPOI能或无法赢得公式的再次来到值呢?”,答案是足以!
壹 、获取模板文件中公式的再次回到值 如在D盘中有二个名为text.xls的Excel文件,其内容如下:

2.3.9
用NPOI操作EXCEL--通过NPOI拿到公式的再次回到值

注意C1单元格中设置的是公式“$A1*$B1”,而不是值“12”。利用NPOI,只供给写不难的几句代码就能够得到此公式的重临值:

      前边大家学习了通过NPOI向Excel中安装公式,那么有个别读者只怕会问:“NPOI能或无法获取公式的重回值呢?”,答案是足以!
① 、获取模板文件中公式的重临值 如在D盘中有2个名为text.xls的Excel文件,其剧情如下:

HSSFWorkbook wb = new HSSFWorkbook(new FileStream(“d:/test.xls”,FileMode.Open));
HSSFCell cell = wb.GetSheet(“Sheet1”).GetRow(0).GetCell(2);
System.Console.WriteLine(cell.NumericCellValue);

只顾C1单元格中设置的是公式“$A1*$B1”,而不是值“12”。利用NPOI,只须要写不难的几句代码就足以博得此公式的再次回到值:

输出结果为:

HSSFWorkbook wb = new HSSFWorkbook(new FileStream(“d:/test.xls”,FileMode.Open));
HSSFCell cell = wb.GetSheet(“Sheet1”).GetRow(0).GetCell(2);
System.Console.WriteLine(cell.NumericCellValue);

看得出NPOI成功的“解析”了此.xls文件中的公式。注意NumericCellValue属性会自行依据单元格的体系处理,假使为空将返0,假如为数值将再次来到数值,假诺为公式将回来公式计算后的结果。单元格的品种能够由此CellType属性获取。

出口结果为:

贰 、获取NPOI生成的Excel文件中公式的重临值       上例中是从2个业已存在的Excel文件中取得公式的重回值,那么倘诺Excel文件是经过NPOI制造的,直接用地点的方式得到,也许得不到想要的结果。如:

可知NPOI成功的“解析”了此.xls文件中的公式。注意NumericCellValue属性会自行依据单元格的品种处理,借使为空将返0,假使为数值将回到数值,要是为公式将回到公式总结后的结果。单元格的档次能够通过CellType属性获取。

1 HSSFWorkbook hssfworkbook = new HSSFWorkbook();
2 HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);
3 HSSFRow row = sheet1.CreateRow(0);
4 row.CreateCell(0).SetCellValue(3);
5 row.CreateCell(1).SetCellValue(4);
6 HSSFCell cell = row.CreateCell(2);

8 cell.SetCellFormula(“$A1+$B1”);
9 System.Console.WriteLine(cell.NumericCellValue);

贰 、获取NPOI生成的Excel文件中公式的再次来到值       上例中是从3个一度存在的Excel文件中拿走公式的再次回到值,那么借使Excel文件是透过NPOI创制的,直接用地方的不二法门赢得,可能得不到想要的结果。如:

      执行上面代码,将出口结果“0”,而不是大家想要的结果“7”。那么将何以解决吗?那时要用到HSSFFormula伊娃luator类。在第玖行后拉长那两句就能够了:

1 HSSFWorkbook hssfworkbook = new HSSFWorkbook();
2 HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);
3 HSSFRow row = sheet1.CreateRow(0);
4 row.CreateCell(0).SetCellValue(3);
5 row.CreateCell(1).SetCellValue(4);
6 HSSFCell cell = row.CreateCell(2);

8 cell.SetCellFormula(“$A1+$B1”);
9 System.Console.WriteLine(cell.NumericCellValue);

HSSFFormulaEvaluator e = new HSSFFormulaEvaluator(hssfworkbook);
cell = e.EvaluateInCell(cell);

      执行下面代码,将出口结果“0”,而不是我们想要的结果“7”。那么将何以缓解吧?那时要用到HSSFFormula伊娃luator类。在第9行后拉长那两句就能够了:

运行结果如下:

HSSFFormulaEvaluator e = new HSSFFormulaEvaluator(hssfworkbook);
cell = e.EvaluateInCell(cell);

 

运作结果如下:

 

 

2.4.1用NPOI操作EXCEL--画线

 

之具备说NPOI强大,是因为常用的Excel操作她都能够透过编制程序的点子成就。这节发轫,我们发轫攻读NPOI的绘画功用。先从最简易的上马,画一条直线:

2.4.1
用NPOI操作EXCEL--画线

相应的代码为:

之具有说NPOI强大,是因为常用的Excel操作她都得以透过编程的法门形成。那节起首,大家开头上学NPOI的图画功用。先从最简易的始发,画一条直线:

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);
HSSFPatriarch patriarch = sheet1.CreateDrawingPatriarch();
HSSFClientAnchor a1 = new HSSFClientAnchor(255, 125, 1023, 150, 0, 0,2, 2);
HSSFSimpleShape line1 = patriarch.CreateSimpleShape(a1);

对应的代码为:

line1.ShapeType = HSSFSimpleShape.OBJECT_TYPE_LINE;
line1.LineStyle = HSSFShape.LINESTYLE_SOLID;
//在NPOI中线的上涨幅度12700表示1pt,所以那边是0.5pt粗的线条。
line1.LineWidth = 6350;

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);
HSSFPatriarch patriarch = sheet1.CreateDrawingPatriarch();
HSSFClientAnchor a1 = new HSSFClientAnchor(255, 125, 1023, 150, 0, 0,2, 2);
HSSFSimpleShape line1 = patriarch.CreateSimpleShape(a1);

平常,利用NPOI画图首要有以下多少个步骤:
1. 创立2个Patriarch;
2. 创办多少个Anchor,以明显图形的地点;
3. 调用帕特riarch创制图形;
4. 设置图形类型(直线,矩形,圆形等)及体制(颜色,粗细等)。

line1.ShapeType = HSSFSimpleShape.OBJECT_TYPE_LINE;
line1.LineStyle = HSSFShape.LINESTYLE_SOLID;
//在NPOI中线的大幅度12700意味着1pt,所以那边是0.5pt粗的线条。
line1.LineWidth = 6350;

至于HSSFClientAnchor(dx1,dy1,dx2,dy2,col1,row1,col2,row2)的参数,有必不可少在那里说美赞臣(Meadjohnson)下:
dx1:初阶单元格的x偏移量,如例子中的255意味直线早先地点距A1单元格左边的偏离;
dy1:初始单元格的y偏移量,如例子中的125表示直线起先地点距A1单元格上侧的离开;
dx2:终止单元格的x偏移量,如例子中的1023象征直线开始地方距C3单元格右边的偏离;
dy2:终止单元格的y偏移量,如例子中的150象征直线初步地点距C3单元格上侧的相距;
col1:初始单元格列序号,从0开端盘算;
row1:初阶单元格行序号,从0开首盘算,如例子中col1=0,row1=0就表示开首单元格为A1;
col2:终止单元格列序号,从0初叶盘算;
row2:终止单元格行序号,从0初始猜度,如例子中col2=2,row2=2就代表开端单元格为C3;

一般性,利用NPOI画图首要有以下多少个步骤:
1. 创办2个Patriarch;
2. 开立贰个Anchor,以明确图形的职务;
3. 调用Patriarch制造图形;
4. 装置图形类型(直线,矩形,圆形等)及体制(颜色,粗细等)。

终极,关于LineStyle属性,有如下一些可选值,对应的功用分别如图所示:

有关HSSFClientAnchor(dx1,dy1,dx2,dy2,col1,row1,col2,row2)的参数,有要求在那里表达一下:
dx1:开始单元格的x偏移量,如例子中的255意味直线起先地方距A1单元格右侧的相距;
dy1:伊始单元格的y偏移量,如例子中的125意味直线初叶地点距A1单元格上侧的距离;
dx2:终止单元格的x偏移量,如例子中的1023表示直线初始地方距C3单元格左边的偏离;
dy2:终止单元格的y偏移量,如例子中的150象征直线开头地点距C3单元格上侧的距离;
col1:开端单元格列序号,从0开端估算;
row1:开首单元格行序号,从0起初总括,如例子中col1=0,row1=0就象征开首单元格为A1;
col2:终止单元格列序号,从0开头测度;
row2:终止单元格行序号,从0初阶总结,如例子中col2=2,row2=2就意味着初始单元格为C3;

 

末尾,关于LineStyle属性,有如下一些可选值,对应的职能分别如图所示:

2.4.2用NPOI操作EXCEL--画矩形

 

上一节咱们讲了NPOI中画图的中心步骤:
1. 创造叁个帕特riarch;
2. 创设七个Anchor,以鲜明图形的岗位;
3. 调用Patriarch创设图形;
4. 安装图形类型(直线,矩形,圆形等)及体制(颜色,粗细等)。

2.4.2
用NPOI操作EXCEL--画矩形

这一节大家将坚守那一个手续成立三个矩形。废话少说,上代码:

上一节我们讲了NPOI中画图的着力步骤:

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);
HSSFPatriarch patriarch = sheet1.CreateDrawingPatriarch();
HSSFClientAnchor a1 = new HSSFClientAnchor(255, 125, 1023, 150, 0, 0, 2, 2);
HSSFSimpleShape rec1 = patriarch.CreateSimpleShape(a1);
//此处安装图形类型为矩形
rec1.ShapeType = HSSFSimpleShape.OBJECT_TYPE_RECTANGLE;
//设置填充色
rec1.SetFillColor(125, 125, 125);
//设置边框样式
rec1.LineStyle = HSSFShape.LINESTYLE_DASHGEL;
//设置边框宽度
rec1.LineWidth = 25400;
//设置边框颜色
rec1.SetLineStyleColor(100, 0, 100);

  1. 创制2个Patriarch;
  2. 创立八个Anchor,以明显图形的职分;
  3. 调用Patriarch创制图形;
  4. 设置图形类型(直线,矩形,圆形等)及体制(颜色,粗细等)。

 

这一节大家将遵照那么些手续创立三个矩形。废话少说,上代码:

代码执行效果:
 
里面SetFillColor和SetLineStyleColor函数的多少个参数分别是宝马X5GB三色值,具体表示什么颜色,找个Photoshop试试:)
至于HSSFClientAnchor参数表达、边框样式,边框宽度的求证能够瞻仰前一篇博文:
http://www.cnblogs.com/atao/archive/2009/09/13/1565645.html

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);
HSSFPatriarch patriarch = sheet1.CreateDrawingPatriarch();
HSSFClientAnchor a1 = new HSSFClientAnchor(255, 125, 1023, 150, 0, 0, 2, 2);
HSSFSimpleShape rec1 = patriarch.CreateSimpleShape(a1);
//此处安装图形类型为矩形
rec1.ShapeType = HSSFSimpleShape.OBJECT_TYPE_RECTANGLE;
//设置填充色
rec1.SetFillColor(125, 125, 125);
//设置边框样式
rec1.LineStyle = HSSFShape.LINESTYLE_DASHGEL;
//设置边框宽度
rec1.LineWidth = 25400;
//设置边框颜色
rec1.SetLineStyleColor(100, 0, 100);

 

 

2.4.3用NPOI操作EXCEL--画圆形

代码执行效果:
 
里面SetFillColor和SetLineStyleColor函数的四个参数分别是卡宴GB三色值,具体表示什么颜色,找个Photoshop试试:)
至于HSSFClientAnchor参数表达、边框样式,边框宽度的辨证能够瞻仰前一篇博文:
http://www.cnblogs.com/atao/archive/2009/09/13/1565645.html

      前边我们学习了NPOI中的画简单直线和矩形的功用,明日我们一起学习一下它补助的另一种简单图形--圆形。同样,依据前面所讲的绘图“四步曲”:
1. 创建1个Patriarch;
2. 创办二个Anchor,以鲜明图形的任务;
3. 调用Patriarch成立图形;
4. 安装图形类型(直线,矩形,圆形等)及体制(颜色,粗细等)。
依旧以例子加以印证:

 

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);
HSSFPatriarch patriarch = sheet1.CreateDrawingPatriarch();
HSSFClientAnchor a1 = new HSSFClientAnchor(0, 0, 1023, 0, 0, 0, 1, 3);
HSSFSimpleShape rec1 = patriarch.CreateSimpleShape(a1);
rec1.ShapeType = HSSFSimpleShape.OBJECT_TYPE_OVAL;

2.4.3
用NPOI操作EXCEL--画圆形

rec1.SetFillColor(125, 125, 125);
rec1.LineStyle = HSSFShape.LINESTYLE_DASHGEL;
rec1.LineWidth = 12700;
rec1.SetLineStyleColor(100, 0, 100);
WriteToFile();

      前边大家学习了NPOI中的画简单直线和矩形的功力,前几日我们一块学习一下它支持的另一种简单图形--圆形。同样,依照前面所讲的绘图“四步曲”:

      这里rec1.ShapeType
=HSSFSimpleShape.OBJECT_TYPE_OVAL;表示图形为椭圆。适当调整HSSFClientAnchor的各参数能够获取圆形。
      关于HSSFClientAnchor构造函数和边框、填充色等前两节都有介绍,那里不再重述。详情情见:画矩形画线

  1. 始建一个帕特riarch;
  2. 开创1个Anchor,以分明图形的岗位;
  3. 调用Patriarch创立图形;
  4. 安装图形类型(直线,矩形,圆形等)及体制(颜色,粗细等)。
    抑或以例子加以印证:

地点代码执行生成的Excel如下:

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);
HSSFPatriarch patriarch = sheet1.CreateDrawingPatriarch();
HSSFClientAnchor a1 = new HSSFClientAnchor(0, 0, 1023, 0, 0, 0, 1, 3);
HSSFSimpleShape rec1 = patriarch.CreateSimpleShape(a1);
rec1.ShapeType = HSSFSimpleShape.OBJECT_TYPE_OVAL;

 

rec1.SetFillColor(125, 125, 125);
rec1.LineStyle = HSSFShape.LINESTYLE_DASHGEL;
rec1.LineWidth = 12700;
rec1.SetLineStyleColor(100, 0, 100);
WriteToFile();

2.4.4用NPOI操作EXCEL--画Grid

      这里rec1.ShapeType =
HSSFSimpleShape.OBJECT_TYPE_OVAL;表示图形为椭圆。适当调整HSSFClientAnchor的各参数能够博得圆形。
      关于HSSFClientAnchor构造函数和边框、填充色等前两节都有介绍,那里不再重述。详情情见:画矩形
画线

  在NPOI中,本人并未画Grid的措施。但我们掌握Grid其实便是由横线和竖线构成的,所在大家得以经过画线的不二法门来模拟画Grid。

上面代码执行生成的Excel如下:

 

 

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);

2.4.4
用NPOI操作EXCEL--画Grid

HSSFRow row = sheet1.CreateRow(2);
row.CreateCell(1);
row.HeightInPoints = 240;
sheet1.SetColumnWidth(2, 9000);
int linesCount = 20;

  在NPOI中,自身并未画Grid的法门。但大家了然Grid其实便是由横线和竖线构成的,所在大家得以经过画线的措施来效仿画Grid。

HSSFPatriarch patriarch = sheet1.CreateDrawingPatriarch();
//因为HSSFClientAnchor中dx只可以在0-10第23中学间,dy只好在0-255之间,所以那里运用比例的法子
double xRatio = 1023.0 / (linesCount*10);
double yRatio = 255.0 / (linesCount*10);

 

//画竖线
int x1 = 0;
int y1 = 0;
int x2 = 0;
int y2 = 200;
for (int i = 0; i < linesCount; i++)
{
    HSSFClientAnchor a2 = new HSSFClientAnchor();
    a2.SetAnchor((short)2, 2, (int)(x1 * xRatio), (int)(y1 * yRatio),
            (short)2, 2, (int)(x2 * xRatio), (int)(y2 * yRatio));
    HSSFSimpleShape shape2 = patriarch.CreateSimpleShape(a2);
    shape2.ShapeType = (HSSFSimpleShape.OBJECT_TYPE_LINE);

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);

    x1 += 10;
    x2 += 10;
}

HSSFRow row = sheet1.CreateRow(2);
row.CreateCell(1);
row.HeightInPoints = 240;
sheet1.SetColumnWidth(2, 9000);
int linesCount = 20;

//画横线
x1 = 0;
y1 = 0;
x2 = 200;
y2 = 0;
for (int i = 0; i < linesCount; i++)
{
    HSSFClientAnchor a2 = new HSSFClientAnchor();
    a2.SetAnchor((short)2, 2, (int)(x1 * xRatio), (int)(y1 * yRatio),
            (short)2, 2, (int)(x2 * xRatio), (int)(y2 * yRatio));
    HSSFSimpleShape shape2 = patriarch.CreateSimpleShape(a2);
    shape2.ShapeType = (HSSFSimpleShape.OBJECT_TYPE_LINE);

HSSFPatriarch patriarch = sheet1.CreateDrawingPatriarch();
//因为HSSFClientAnchor中dx只可以在0-1023以内,dy只幸亏0-255以内,所以那边运用比例的法门
double xRatio = 1023.0 / (linesCount*10);
double yRatio = 255.0 / (linesCount*10);

    y1 += 10;
    y2 += 10;
}

//画竖线
int x1 = 0;
int y1 = 0;
int x2 = 0;
int y2 = 200;
for (int i = 0; i < linesCount; i++)
{
    HSSFClientAnchor a2 = new HSSFClientAnchor();
    a2.SetAnchor((short)2, 2, (int)(x1 * xRatio), (int)(y1 * yRatio),
            (short)2, 2, (int)(x2 * xRatio), (int)(y2 * yRatio));
    HSSFSimpleShape shape2 = patriarch.CreateSimpleShape(a2);
    shape2.ShapeType = (HSSFSimpleShape.OBJECT_TYPE_LINE);

请留心HSSFClientAnchor对象中的dx只可以取0-1023里头的数,dy只好取0-255里头的数。大家得以知晓为是将单元格的宽和高平分成了1023和255份,设置dx和dy时约等于按百分比取对应的座标。最后生成的Excel如下:

    x1 += 10;
    x2 += 10;
}

 

//画横线
x1 = 0;
y1 = 0;
x2 = 200;
y2 = 0;
for (int i = 0; i < linesCount; i++)
{
    HSSFClientAnchor a2 = new HSSFClientAnchor();
    a2.SetAnchor((short)2, 2, (int)(x1 * xRatio), (int)(y1 * yRatio),
            (short)2, 2, (int)(x2 * xRatio), (int)(y2 * yRatio));
    HSSFSimpleShape shape2 = patriarch.CreateSimpleShape(a2);
    shape2.ShapeType = (HSSFSimpleShape.OBJECT_TYPE_LINE);

 

    y1 += 10;
    y2 += 10;
}

2.4.5用NPOI操作EXCEL--插入图片

请小心HSSFClientAnchor对象中的dx只可以取0-1023以内的数,dy只好取0-255之内的数。大家得以领略为是将单元格的宽和高平分成了1023和255份,设置dx和dy时一定于按百分比取对应的座标。最毕生成的Excel如下:

      大家掌握,在Excel中是能够插入图片的。操作菜单是“插入->图片”,然后选用要插入图片,能够很不难地在Excel插入图片。同样,在NPOI中,利用代码也得以兑现均等的效益。在NPOI中插入图片的格局与美术的方法有个别类似:

 

//add picture data to this workbook.
byte[] bytes = System.IO.File.ReadAllBytes(@”D:\MyProject\NPOIDemo\ShapeImage\image1.jpg”);
int pictureIdx = hssfworkbook.AddPicture(bytes, HSSFWorkbook.PICTURE_TYPE_JPEG);

 

//create sheet
HSSFSheet sheet = hssfworkbook.CreateSheet(“Sheet1”);

 

// Create the drawing patriarch.  This is the top level Container for all shapes. 
HSSFPatriarch patriarch = sheet.CreateDrawingPatriarch();

2.4.5
用NPOI操作EXCEL--插入图片

//add a picture
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 1023, 0, 0, 0, 1, 3);
HSSFPicture pict = patriarch.CreatePicture(anchor, pictureIdx);

      大家知道,在Excel中是足以插入图片的。操作菜单是“插入->图片”,然后选拔要插入图片,能够很不难地在Excel插入图片。同样,在NPOI中,利用代码也得以兑现均等的效能。在NPOI中插入图片的法子与美术的法子有个别类似:

      与画不难图形不相同的是,首先要将图片读入到byte数组,然后添加到workbook中;最后调用的是patriarch.CreatePicture(anchor,
pictureIdx)方法展现图片,而不是patriarch.CreateSimpleShape(anchor)方法。上边那段代码执行后生成的Excel文件样式如下:

//add picture data to this workbook.
byte[] bytes = System.IO.File.ReadAllBytes(@”D:\MyProject\NPOIDemo\ShapeImage\image1.jpg”);
int pictureIdx = hssfworkbook.AddPicture(bytes, HSSFWorkbook.PICTURE_TYPE_JPEG);

      大家发现,插入的图纸被拉伸填充在HSSFClientAnchor钦命的区域。有时恐怕大家并不供给拉伸的效能,咋办吧?很不难,在结尾加上这样一句用来机关调节图片大小:

//create sheet
HSSFSheet sheet = hssfworkbook.CreateSheet(“Sheet1”);

pict.Resize();

// Create the drawing patriarch.  This is the top level container for all shapes. 
HSSFPatriarch patriarch = sheet.CreateDrawingPatriarch();

累加代码后再举办上述代码,生成的Excel样式如下:

//add a picture
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 1023, 0, 0, 0, 1, 3);
HSSFPicture pict = patriarch.CreatePicture(anchor, pictureIdx);

图表已经自行伸缩到原来大小了。

      与画简单图形区别的是,首先要将图片读入到byte数组,然后添加到workbook中;最后调用的是patriarch.CreatePicture(anchor,
pictureIdx)方法显示图片,而不是patriarch.CreateSimpleShape(anchor)方法。下面那段代码执行后生成的Excel文件样式如下:

 

      我们发现,插入的图纸被拉伸填充在HSSFClientAnchor钦定的区域。有时可能大家并不须求拉伸的功用,如何做吧?很简短,在最终加上那样一句用来机关调节图片大小:

NPOI
1.2教程
 –
2.5 打字与印刷相关安装

pict.Resize();

作者:Tony Qu

丰硕代码后再进行上述代码,生成的Excel样式如下:

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

图形已经自行伸缩到原有大小了。

 

 

打印设置主要回顾方向设置、缩放、纸张设置、页边距等。NPOI
1.2支撑超过半数打字与印刷属性,能够让你轻松满意客户的打字与印刷需求。

NPOI 1.2学科 – 2.5
打字与印刷相关安装

 

作者:Tony Qu

首先是来势设置,Excel帮助三种页面方向,即纵向和横向。

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

 

 

在NPOI中如何设置呢?你能够由此HSSFSheet.PrintSetup.雷克萨斯scape来设置,BRABUSscape是布尔类型的,在菲律宾语中是横向的趣味。倘使Romeoscape等于true,则表示页面方向为横向;不然为纵向。

打字与印刷设置首要不外乎方向设置、缩放、纸张设置、页边距等。NPOI
1.2支撑大多数打字与印刷属性,能够让你轻松满足客户的打字与印刷要求。

 

 

随后是缩放设置,

率先是来势设置,Excel协助二种页面方向,即纵向和横向。

 

 

 

在NPOI中什么设置呢?你能够透过HSSFSheet.PrintSetup.McLarenscape来设置,Lamborghiscape是布尔类型的,在克罗地亚共和国(Republika Hrvatska)语中是横向的意味。假如BRABUSscape等于true,则意味页面方向为横向;不然为纵向。

那里的缩放比例对应于HSSFSheet.PrintSetup.Scale,而页宽和页高分别对应于HSSFSheet.PrintSetup.FitWidth和HSSFSheet.PrintSetup.FitHeight。要小心的是,那里的PrintSetup.Scale应该被安装为0-100时期的值,而不是小数。

 

 

随后是缩放设置,

 

 

接下去就是纸张设置了,对应于HSSFSheet.PrintSetup.PaperSize,但那里的PaperSize并不是随便设置的,而是由一些固定的值决定的,具体的值与相应的纸张如下表所示:

 

纸张

1

US Letter 8 1/2 x 11 in

2

US Letter Small 8 1/2 x 11 in

3

US Tabloid 11 x 17 in

4

US Ledger 17 x 11 in

5

US Legal 8 1/2 x 14 in

6

US Statement 5 1/2 x 8 1/2 in

7

US Executive 7 1/4 x 10 1/2 in

8

A3 297 x 420 mm

9

A4 210 x 297 mm

10

A4 Small 210 x 297 mm

11

A5 148 x 210 mm

12

B4 (JIS) 250 x 354

13

B5 (JIS) 182 x 257 mm

14

Folio 8 1/2 x 13 in

15

Quarto 215 x 275 mm

16

10 x 14 in

17

11 x 17 in

18

US Note 8 1/2 x 11 in

19

US Envelope #9 3 7/8 x 8 7/8

20

US Envelope #10 4 1/8 x 9 1/2

21

US Envelope #11 4 1/2 x 10 3/8

22

US Envelope #12 4 \276 x 11

23

US Envelope #14 5 x 11 1/2

24

C size sheet

25

D size sheet

26

E size sheet

27

Envelope DL 110 x 220mm

28

Envelope C5 162 x 229 mm

29

Envelope C3 324 x 458 mm

30

Envelope C4 229 x 324 mm

31

Envelope C6 114 x 162 mm

32

Envelope C65 114 x 229 mm

33

Envelope B4 250 x 353 mm

34

Envelope B5 176 x 250 mm

35

Envelope B6 176 x 125 mm

36

Envelope 110 x 230 mm

37

US Envelope Monarch 3.875 x 7.5 in

38

6 3/4 US Envelope 3 5/8 x 6 1/2 in

39

US Std Fanfold 14 7/8 x 11 in

40

German Std Fanfold 8 1/2 x 12 in

41

German Legal Fanfold 8 1/2 x 13 in

42

B4 (ISO) 250 x 353 mm

43

Japanese Postcard 100 x 148 mm

44

9 x 11 in

45

10 x 11 in

46

15 x 11 in

47

Envelope Invite 220 x 220 mm

48

RESERVED–DO NOT USE

49

RESERVED–DO NOT USE

50

US Letter Extra 9 \275 x 12 in

51

US Legal Extra 9 \275 x 15 in

52

US Tabloid Extra 11.69 x 18 in

53

A4 Extra 9.27 x 12.69 in

54

Letter Transverse 8 \275 x 11 in

55

A4 Transverse 210 x 297 mm

56

Letter Extra Transverse 9\275 x 12 in

57

SuperA/SuperA/A4 227 x 356 mm

58

SuperB/SuperB/A3 305 x 487 mm

59

US Letter Plus 8.5 x 12.69 in

60

A4 Plus 210 x 330 mm

61

A5 Transverse 148 x 210 mm

62

B5 (JIS) Transverse 182 x 257 mm

63

A3 Extra 322 x 445 mm

64

A5 Extra 174 x 235 mm

65

B5 (ISO) Extra 201 x 276 mm

66

A2 420 x 594 mm

67

A3 Transverse 297 x 420 mm

68

A3 Extra Transverse 322 x 445 mm

69

Japanese Double Postcard 200 x 148 mm

70

A6 105 x 148 mm

71

Japanese Envelope Kaku #2

72

Japanese Envelope Kaku #3

73

Japanese Envelope Chou #3

74

Japanese Envelope Chou #4

75

Letter Rotated 11 x 8 1/2 11 in

76

A3 Rotated 420 x 297 mm

77

A4 Rotated 297 x 210 mm

78

A5 Rotated 210 x 148 mm

79

B4 (JIS) Rotated 364 x 257 mm

80

B5 (JIS) Rotated 257 x 182 mm

81

Japanese Postcard Rotated 148 x 100 mm

82

Double Japanese Postcard Rotated 148 x 200 mm

83

A6 Rotated 148 x 105 mm

84

Japanese Envelope Kaku #2 Rotated

85

Japanese Envelope Kaku #3 Rotated

86

Japanese Envelope Chou #3 Rotated

87

Japanese Envelope Chou #4 Rotated

88

B6 (JIS) 128 x 182 mm

89

B6 (JIS) Rotated 182 x 128 mm

90

12 x 11 in

91

Japanese Envelope You #4

92

Japanese Envelope You #4 Rotated

93

PRC 16K 146 x 215 mm

94

PRC 32K 97 x 151 mm

95

PRC 32K(Big) 97 x 151 mm

96

PRC Envelope #1 102 x 165 mm

97

PRC Envelope #2 102 x 176 mm

98

PRC Envelope #3 125 x 176 mm

99

PRC Envelope #4 110 x 208 mm

100

PRC Envelope #5 110 x 220 mm

101

PRC Envelope #6 120 x 230 mm

102

PRC Envelope #7 160 x 230 mm

103

PRC Envelope #8 120 x 309 mm

104

PRC Envelope #9 229 x 324 mm

105

PRC Envelope #10 324 x 458 mm

106

PRC 16K Rotated

107

PRC 32K Rotated

108

PRC 32K(Big) Rotated

109

PRC Envelope #1 Rotated 165 x 102 mm

110

PRC Envelope #2 Rotated 176 x 102 mm

111

PRC Envelope #3 Rotated 176 x 125 mm

112

PRC Envelope #4 Rotated 208 x 110 mm

113

PRC Envelope #5 Rotated 220 x 110 mm

114

PRC Envelope #6 Rotated 230 x 120 mm

115

PRC Envelope #7 Rotated 230 x 160 mm

116

PRC Envelope #8 Rotated 309 x 120 mm

117

PRC Envelope #9 Rotated 324 x 229 mm

118

PRC Envelope #10 Rotated 458 x 324 mm

此地的缩放比例对应于HSSFSheet.PrintSetup.Scale,而页宽和页高分别对应于HSSFSheet.PrintSetup.FitWidth和HSSFSheet.PrintSetup.FitHeight。要专注的是,那里的PrintSetup.Scale应该被设置为0-100中间的值,而不是小数。

(此表摘自《Excel Binary File Format (.xls) Structure
Specification.pdf》)

 

HSSFSheet上边定义了有些xxxx_PAPE福特ExplorerSIZE的常量,但都是10分常用的纸张大小,假诺满意不断你的急需,可以依据上表本人给帕佩rSize属性赋值。所以,要是您要设置纸张大小能够用那样的代码:

 

HSSFSheet.PrintSetup.PaperSize=HSSFSheet.A4_PAPERSIZE;

接下去就是纸张设置了,对应于HSSFSheet.PrintSetup.PaperSize,但那里的PaperSize并不是无论设置的,而是由一些恒定的值决定的,具体的值与相应的纸张如下表所示:

纸张

1

US Letter 8 1/2 x 11 in

2

US Letter Small 8 1/2 x 11 in

3

US Tabloid 11 x 17 in

4

US Ledger 17 x 11 in

5

US Legal 8 1/2 x 14 in

6

US Statement 5 1/2 x 8 1/2 in

7

US Executive 7 1/4 x 10 1/2 in

8

A3 297 x 420 mm

9

A4 210 x 297 mm

10

A4 Small 210 x 297 mm

11

A5 148 x 210 mm

12

B4 (JIS) 250 x 354

13

B5 (JIS) 182 x 257 mm

14

Folio 8 1/2 x 13 in

15

Quarto 215 x 275 mm

16

10 x 14 in

17

11 x 17 in

18

US Note 8 1/2 x 11 in

19

US Envelope #9 3 7/8 x 8 7/8

20

US Envelope #10 4 1/8 x 9 1/2

21

US Envelope #11 4 1/2 x 10 3/8

22

US Envelope #12 4 \276 x 11

23

US Envelope #14 5 x 11 1/2

24

C size sheet

25

D size sheet

26

E size sheet

27

Envelope DL 110 x 220mm

28

Envelope C5 162 x 229 mm

29

Envelope C3 324 x 458 mm

30

Envelope C4 229 x 324 mm

31

Envelope C6 114 x 162 mm

32

Envelope C65 114 x 229 mm

33

Envelope B4 250 x 353 mm

34

Envelope B5 176 x 250 mm

35

Envelope B6 176 x 125 mm

36

Envelope 110 x 230 mm

37

US Envelope Monarch 3.875 x 7.5 in

38

6 3/4 US Envelope 3 5/8 x 6 1/2 in

39

US Std Fanfold 14 7/8 x 11 in

40

German Std Fanfold 8 1/2 x 12 in

41

German Legal Fanfold 8 1/2 x 13 in

42

B4 (ISO) 250 x 353 mm

43

Japanese Postcard 100 x 148 mm

44

9 x 11 in

45

10 x 11 in

46

15 x 11 in

47

Envelope Invite 220 x 220 mm

48

RESERVED–DO NOT USE

49

RESERVED–DO NOT USE

50

US Letter Extra 9 \275 x 12 in

51

US Legal Extra 9 \275 x 15 in

52

US Tabloid Extra 11.69 x 18 in

53

A4 Extra 9.27 x 12.69 in

54

Letter Transverse 8 \275 x 11 in

55

A4 Transverse 210 x 297 mm

56

Letter Extra Transverse 9\275 x 12 in

57

SuperA/SuperA/A4 227 x 356 mm

58

SuperB/SuperB/A3 305 x 487 mm

59

US Letter Plus 8.5 x 12.69 in

60

A4 Plus 210 x 330 mm

61

A5 Transverse 148 x 210 mm

62

B5 (JIS) Transverse 182 x 257 mm

63

A3 Extra 322 x 445 mm

64

A5 Extra 174 x 235 mm

65

B5 (ISO) Extra 201 x 276 mm

66

A2 420 x 594 mm

67

A3 Transverse 297 x 420 mm

68

A3 Extra Transverse 322 x 445 mm

69

Japanese Double Postcard 200 x 148 mm

70

A6 105 x 148 mm

71

Japanese Envelope Kaku #2

72

Japanese Envelope Kaku #3

73

Japanese Envelope Chou #3

74

Japanese Envelope Chou #4

75

Letter Rotated 11 x 8 1/2 11 in

76

A3 Rotated 420 x 297 mm

77

A4 Rotated 297 x 210 mm

78

A5 Rotated 210 x 148 mm

79

B4 (JIS) Rotated 364 x 257 mm

80

B5 (JIS) Rotated 257 x 182 mm

81

Japanese Postcard Rotated 148 x 100 mm

82

Double Japanese Postcard Rotated 148 x 200 mm

83

A6 Rotated 148 x 105 mm

84

Japanese Envelope Kaku #2 Rotated

85

Japanese Envelope Kaku #3 Rotated

86

Japanese Envelope Chou #3 Rotated

87

Japanese Envelope Chou #4 Rotated

88

B6 (JIS) 128 x 182 mm

89

B6 (JIS) Rotated 182 x 128 mm

90

12 x 11 in

91

Japanese Envelope You #4

92

Japanese Envelope You #4 Rotated

93

PRC 16K 146 x 215 mm

94

PRC 32K 97 x 151 mm

95

PRC 32K(Big) 97 x 151 mm

96

PRC Envelope #1 102 x 165 mm

97

PRC Envelope #2 102 x 176 mm

98

PRC Envelope #3 125 x 176 mm

99

PRC Envelope #4 110 x 208 mm

100

PRC Envelope #5 110 x 220 mm

101

PRC Envelope #6 120 x 230 mm

102

PRC Envelope #7 160 x 230 mm

103

PRC Envelope #8 120 x 309 mm

104

PRC Envelope #9 229 x 324 mm

105

PRC Envelope #10 324 x 458 mm

106

PRC 16K Rotated

107

PRC 32K Rotated

108

PRC 32K(Big) Rotated

109

PRC Envelope #1 Rotated 165 x 102 mm

110

PRC Envelope #2 Rotated 176 x 102 mm

111

PRC Envelope #3 Rotated 176 x 125 mm

112

PRC Envelope #4 Rotated 208 x 110 mm

113

PRC Envelope #5 Rotated 220 x 110 mm

114

PRC Envelope #6 Rotated 230 x 120 mm

115

PRC Envelope #7 Rotated 230 x 160 mm

116

PRC Envelope #8 Rotated 309 x 120 mm

117

PRC Envelope #9 Rotated 324 x 229 mm

118

PRC Envelope #10 Rotated 458 x 324 mm

HSSFSheet.PrintSetup.PaperSize=9;(A4 210*297mm)

(此表摘自《Excel Binary File Format (.xls) Structure
Specification.pdf》)

 

HSSFSheet上面定义了有的xxxx_PAPERubiconSIZE的常量,但都以老大常用的纸张大小,要是满意不断你的急需,能够依据上表自个儿给PaperSize属性赋值。所以,假使你要安装纸张大小能够用那样的代码:

 

HSSFSheet.PrintSetup.PaperSize=HSSFSheet.A4_PAPERSIZE;

再下来就是打字与印刷的开局页码,它对应于HSSFSheet.PrintSetup.PageStart和HSSFSheet.PrintSetup.UsePage,如果UsePage=false,那么就一定于“自动”,那时PageStart不起功用;若是UsePage=true,PageStart才会起成效。所以在安装PageStart从前,必须先把UsePage设置为true。

 

HSSFSheet.PrintSetup.PaperSize=9; (A4 210*297mm)

 

 

“打字与印刷”栏中的“网格线”设置相应于HSSFSheet.IsPrintGridlines,请小心,那里不是HSSFSheet.PrintSetup上边,所以别搞混了。这里之所以不依附于PrintSetup是由底层存款和储蓄该音信的record决定的,底层是把IsGridsPrinted放在GridsetRecord里面包车型大巴,而不是PrintSetupRecord里面包车型客车,就算界面上是身处一块儿的。别的还有二个HSSFSheet.IsGridsPrinted属性,那些性格对应于底层的gridset
Record,但那么些record是保存的,从微软的文书档案显示没有任何意义,所以那几个本性请不要去设置。

 

“单色打字与印刷”则对应于HSSFSheet.PrintSetup.NoColors,那是布尔类型的,值为true时,表示单色打字与印刷。

再下来正是打印的序幕页码,它对应于HSSFSheet.PrintSetup.PageStart和HSSFSheet.PrintSetup.UsePage,若是UsePage=false,那么就一定于“自动”,那时PageStart不起功能;固然UsePage=true,PageStart才会起效果。所以在设置PageStart在此以前,必须先把UsePage设置为true。

“草稿质量”对应于HSSFSheet.PrintSetup.IsDraft,也是布尔类型的,值为true时,表示用草稿品质打字与印刷。

 

此处的打字与印刷顺序是由HSSFSheet.PrintSetup.LeftToRight决定的,它是布尔类型的,当为true时,则意味“先行后列”;假设是false,则表示“先列后行”。

 

 

“打字与印刷”栏中的“网格线”设置相应于HSSFSheet.IsPrintGridlines,请留心,那里不是HSSFSheet.PrintSetup上边,所以别搞混了。那里之所以不依附于PrintSetup是由底层存储该音讯的record决定的,底层是把IsGridsPrinted放在GridsetRecord里面包车型大巴,而不是PrintSetupRecord里面包车型大巴,就算界面上是身处一起的。其余还有三个HSSFSheet.IsGridsPrinted属性,这几个天性对应于底层的gridset
Record,但以此record是保存的,从微软的文书档案呈现没有别的意义,所以这脾特性请不要去设置。

在NPOI
1.第22中学,“行号列标”、“批注”和“错误单元格打印为”、“页边距”暂不协助,将在此后的本子中援救。

“单色打字与印刷”则对应于HSSFSheet.PrintSetup.NoColors,那是布尔类型的,值为true时,表示单色打字与印刷。

 

“草稿品质”对应于HSSFSheet.PrintSetup.IsDraft,也是布尔类型的,值为true时,表示用草稿品质打字与印刷。

至于打字与印刷的范例能够参见NPOI
1.2正式版
中的 SetPrintSettingsInXls项目。

那里的打字与印刷顺序是由HSSFSheet.PrintSetup.LeftToRight决定的,它是布尔类型的,当为true时,则表示“先行后列”;要是是false,则象征“先列后行”。

 

 

2.6.1用NPOI操作EXCEL--调整表单呈现比例

在NPOI
1.第22中学,“行号列标”、“批注”和“错误单元格打字与印刷为”、“页边距”暂不支持,将在之后的版本中扶助。

在Excel中,能够经过调整右下角的滚动条来调动Sheet的来得比例。如图:

 

在NPOI中,也能经过代码达成那样的法力,并且代码相当简单:

至于打字与印刷的范例能够参考 NPOI
1.2正式版

中的 SetPrintSettingsInXls 项目。

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);
sheet1.CreateRow(0).CreateCell(0).SetCellValue(“This is a test.”);
//50% zoom
sheet1.SetZoom(1,2); 

 

大家发现,SetZoom有七个参数。其中第五个参数表示缩放比例的积极分子,第四个参数表示缩放比例的分母,所以SetZoom(1,2)就意味着减弱到十分之五,也正是二分之一。代码执行后生成的Excel样式如下:

2.6.1
用NPOI操作EXCEL--调整表单展现比例

如果将SetZoom的参数改成(2,1),代码执行后生成的Excel样式如下,表示增加两倍:

在Excel中,能够因而调整右下角的滚动条来调整Sheet的突显比例。如图:

 

在NPOI中,也能由此代码达成如此的功力,并且代码很是简单:

 

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);
sheet1.CreateRow(0).CreateCell(0).SetCellValue(“This is a test.”);
//50% zoom
sheet1.SetZoom(1,2); 

2.6.2用NPOI操作EXCEL--设置密码

大家发现,SetZoom有多个参数。当中第二个参数表示缩放比例的成员,第②个参数表示缩放比例的分母,所以SetZoom(1,2)就表示减少到六分之三,也正是5/10。代码执行后生成的Excel样式如下:

      有时,大家也许须要一些单元格只读,如在做模板时,模板中的数据是不能够随意让别人改的。在Excel中,能够透过“审阅->爱抚工作表”来完结,如下图:
     
 那么,在NPOI中有没有方法通过编码的方法完毕这一功能呢?答案是自然的。

万一将SetZoom的参数改成(2,1),代码执行后生成的Excel样式如下,表示扩充两倍:

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);

 

HSSFRow row1 = sheet1.CreateRow(0);
HSSFCell cel1 = row1.CreateCell(0);
HSSFCell cel2 = row1.CreateCell(1);

 

HSSFCellStyle unlocked = hssfworkbook.CreateCellStyle();
unlocked.IsLocked = false;

2.6.2
用NPOI操作EXCEL--设置密码

HSSFCellStyle locked = hssfworkbook.CreateCellStyle();
locked.IsLocked = true;

      有时,大家可能须求一些单元格只读,如在做模板时,模板中的数据是不可能轻易让别人改的。在Excel中,能够通过“审阅->爱慕工作表”来成功,如下图:
     
 那么,在NPOI中有没有法子通过编码的方法完成这一功效啊?答案是迟早的。

cel1.SetCellValue(“没被锁定”);
cel1.CellStyle = unlocked;

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);

cel2.SetCellValue(“被锁定”);
cel2.CellStyle = locked;

HSSFRow row1 = sheet1.CreateRow(0);
HSSFCell cel1 = row1.CreateCell(0);
HSSFCell cel2 = row1.CreateCell(1);

sheet1.ProtectSheet(“password”);

HSSFCellStyle unlocked = hssfworkbook.CreateCellStyle();
unlocked.IsLocked = false;

永利会娱乐,正如代码中所看到的,大家由此设置CellStype的ISLocked为True,表示此单元格将被锁定。也正是在Excel中施行了之类操作:

HSSFCellStyle locked = hssfworkbook.CreateCellStyle();
locked.IsLocked = true;

然后经过ProtectSheet设置密码。

cel1.SetCellValue(“没被锁定”);
cel1.CellStyle = unlocked;

履行结果如下:

cel2.SetCellValue(“被锁定”);
cel2.CellStyle = locked;

没被锁定的列能够肆意修改。
 

sheet1.ProtectSheet(“password”);

被锁定的列不能够修改。
 

正如代码中所看到的,我们通过设置CellStype的ISLocked为True,表示此单元格将被锁定。也就是在Excel中履行了如下操作:

输入密码能够去掉锁定。

然后通过ProtectSheet设置密码。

 

执行结果如下:

NPOI
1.2教程
 – 组合行、列

没被锁定的列能够随便修改。
 

作者:Tony Qu

被锁定的列不可能改改。
 

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

输入密码可以解除锁定。

 

 

Excel
贰零零伍中有三个面板是专门用来安装组成成效的,叫做“分级突显”面板,如下所示:

NPOI 1.2教程 –
组合行、列

 

作者:Tony Qu

唯恐我们在过去生成Excel文件的时候根本不会用那个效应,也不能够用,因为cvs法和html法不可能控制那么些东西。那里大概的介绍一下怎么叫做组合:

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

组成分为行组合和列组合,所谓行组合,正是让n行组合成多个集聚,能够实行实行和购并操作,在Excel中呈现如下:

 

 

Excel
二〇〇七中有叁个面板是专程用于安装组效能应的,叫做“分级展现”面板,如下所示:

图中右边就是用来控制行组合折叠的图标,图中上部就是用来控制列组合的,是或不是有点像TreeView中的折叠节点?很多时候由于数量太多,为了让用户对于大气数码一目通晓,大家得以接纳行列组合来化解呈现大纲,那和Visual
Studio 里面的region的概念是接近的。

 

周到的情人或许早已注意到了,大家实际上能够对一行做往往结合操作,那就是个别显示的定义,图中就把行2-3分为二个组成,第③行到第陆表现2个结缘,第3行到第4行二个整合,所以是分两级。

恐怕大家在过去生成Excel文件的时候根本不会用这些作用,也不可能用,因为cvs法和html法不能够控制那几个事物。那里大致的牵线一下什么叫做组合:

在NPOI中,要完成分组其实并简单,你只必要调用HSSFSheet.GroupRow和HSSFSheet.GroupColumn那多个办法就能够了。

组成分为行组合和列组合,所谓行组合,正是让n行组合成3个聚集,能够实行进行和合并操作,在Excel中显示如下:

 

 

率先大家来看HSSFSheet.GroupRow,GroupRow有二个参数,分别是fromRow和toRow,表示早先行号和停止行号,那几个行号都是从0开端算起的。

图中左边便是用来控制行组合折叠的图标,图中上部正是用来控制列组合的,是或不是有点像TreeView中的折叠节点?很多时候由于数量太多,为了让用户对于大气数码一目精晓,大家得以选拔行列组合来化解展现大纲,那和Visual
Studio 里面包车型地铁region的概念是类似的。

HSSFWorkbookhssfworkbook =newHSSFWorkbook();

密切的仇敌只怕早就注意到了,我们其实能够对一行做往往组成操作,那正是各自突显的定义,图中就把行2-3分为一个组成,第一行到第五行为叁个重组,第一行到第陆行贰个结合,所以是分两级。

HSSFSheet s =hssfworkbook.CreateSheet(“Sheet1”);

在NPOI中,要兑现分组其实并不难,你只需求调用HSSFSheet.GroupRow和HSSFSheet.GroupColumn那多个方法就足以了。

s.GroupRow(1,3);

 

地点的代码把第一行到第六行做了组合。

先是我们来看HSSFSheet.GroupRow,GroupRow有2个参数,分别是fromRow和toRow,表示开始行号和终止行号,那几个行号都是从0伊始算起的。

要组合列,其实代码很相像,如下所示:

HSSFWorkbook hssfworkbook = new HSSFWorkbook();

s.GroupColumn(1,3)

HSSFSheet s = hssfworkbook.CreateSheet(“Sheet1”);

地方的代码把B至D列做了整合。

s.GroupRow(1, 3);

 

上边的代码把第二行到第五行做了咬合。

正如上海体育地方中Excel的“分级显示”面板所示,有“组合”,也必然有“废除组合”,NPOI中您能够用HSSFSheet.UngroupRow和HSSFSheet.UngroupColumn,参数和GroupXXX是一样的,倘使要撤回第3到第6行的构成,就足以用上面包车型大巴代码:

要组合列,其实代码很相似,如下所示:

s.UngroupColumn(1,3)

s.GroupColumn(1,3)

 

下面的代码把B至D列做了组合。

相关范例请见NPOI
1.2正式版
中的GroupRowAndColumnInXls项目。

 

 

正如上图中Excel的“分级显示”面板所示,有“组合”,也迟早有“撤消组合”,NPOI中您能够用HSSFSheet.UngroupRow和HSSFSheet.UngroupColumn,参数和GroupXXX是千篇一律的,假如要撤回第①到第6行的咬合,就能够用上面的代码:

2.6.4用NPOI操作EXCEL--锁定列

s.UngroupColumn(1,3)

      在Excel中,有时或许相会世列数太多只怕行数太多的状态,那时能够因而锁定列来冻结部分列,不随滚动条滑动,方便查看。在Excel中设置冻结列的措施如下:

 

同一,利用NPOI,通过代码也能落到实处地方的法力:

连带范例请见NPOI
1.2正式版
中的GroupRowAndColumnInXls项目。

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);
HSSFRow row1 = sheet1.CreateRow(0);
row1.CreateCell(0).SetCellValue(“冻结列”);
sheet1.CreateFreezePane(1, 0, 1, 0);

 

代码执行结果如下:

2.6.4
用NPOI操作EXCEL--锁定列

上边对CreateFreezePane的参数作一下验证:
首先个参数表示要冻结的列数;
其次个参数表示要冻结的行数,那里只冻结列所以为0;
其三个参数表示左边区域可知的首列序号,从1起头总括;
第多个参数表示上面区域可知的首行序号,也是从1发端盘算,那里是冻结列,所以为0;

      在Excel中,有时大概会冒出列数太多恐怕行数太多的情事,那时能够经过锁定列来冻结部分列,不随滚动条滑动,方便查看。在Excel中安装冻结列的方式如下:

举例表达也许更好精通,将各参数设置为如下:

一致,利用NPOI,通过代码也能落到实处地点的成效:

sheet1.CreateFreezePane(2,0,5,0);

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);
HSSFRow row1 = sheet1.CreateRow(0);
row1.CreateCell(0).SetCellValue(“冻结列”);
sheet1.CreateFreezePane(1, 0, 1, 0);

 

代码执行结果如下:

得到的功用如下图:

上面对CreateFreezePane的参数作一下证实:
第①个参数表示要冻结的列数;
其次个参数表示要冻结的行数,这里只冻结列所以为0;
其八个参数表示左边区域可知的首列序号,从1始发盘算;
第多少个参数表示上边区域可知的首行序号,也是从1起来总结,那里是冻结列,所以为0;

小心图中C、D和E列私下认可是看不到的,滚动才看得到,那正是第九个参数5起了功用,是还是不是很好精晓了吧:)

举例表达可能更好明白,将各参数设置为如下:

接下去,看一下冻结行的效率。将上边包车型地铁代码稍作修改:

sheet1.CreateFreezePane(2,0,5,0);

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);
HSSFRow row1 = sheet1.CreateRow(0);
row1.CreateCell(0).SetCellValue(“冻结行”);
sheet1.CreateFreezePane(0, 1, 0, 1);

 

推行后生成的Excel文件效果见下图:

赢得的效应如下图:

那么,如若要行和列同时冻结该如何是好啊?聪明的你势必能想得到,呵呵~~

小心图中C、D和E列私下认可是看不到的,滚动才看得到,那正是第陆个参数5起了功能,是还是不是很好精晓了吧:)

 

接下去,看一下冰冻行的功用。将下面的代码稍作修改:

NPOI
1.2教程
 – 显示/隐藏Excel网格线

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);
HSSFRow row1 = sheet1.CreateRow(0);
row1.CreateCell(0).SetCellValue(“冻结行”);
sheet1.CreateFreezePane(0, 1, 0, 1);

作者:Tony Qu

推行后生成的Excel文件效果见下图:

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

那么,假若要行和列同时冻结该如何做啊?聪明的您势必能想得到,呵呵~~

 

 

稍许时候,大家需求网格线,而有点时候大家不须求,那取决实际的事体要求。前二日inmegin兄就问作者,怎么把网格给去掉,因为他们要把Excel文书档案当Word使,或者是因为Excel排版方便啊。

NPOI 1.2教程 –
显示/隐藏Excel网格线

Excel中的网格线设置是以表(Sheet)为单位展开管理的,那也就象征你能够让1个表展现网格线,而另二个表不出示,那是不争执的。

作者:Tony Qu

 

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

在Excel 二〇〇五中,我们平时用“工作表选项”面板来安装这一个天性:

 

 

稍加时候,大家必要网格线,而略带时候大家不须要,那取决实际的事体要求。前两日inmegin兄就问作者,怎么把网格给去掉,因为他俩要把Excel文书档案当Word使,只怕是因为Excel排版方便啊。

 

Excel中的网格线设置是以表(Sheet)为单位展开保管的,这也就象征你能够让二个表显示网格线,而另贰个表不显得,这是不冲突的。

在面板中,你会发现有二个多选框,三个是翻开,一个是打字与印刷,也正是说Excel是把查看和打字与印刷网格线作为多个设置来拍卖的,存款和储蓄的Record也是见仁见智的。

 

在NPOI中,假设要让网格线在查看时显得/隐藏,你能够HSSFSheet.DisplayGridlines属性,私下认可值为true(那也是为什么暗中同意情形下我们能够见到网格线)。上面包车型地铁代码便是让网格线在查看时不可知的:

在Excel 二〇〇七中,大家一般用“工作表选项”面板来设置那几个天性:

HSSFWorkbookhssfworkbook =newHSSFWorkbook();

 

HSSFSheet s1= hssfworkbook.CreateSheet(“Sheet1”);

 

s1.DisplayGridlines=false;

在面板中,你会意识有1个多选框,1个是查看,一个是打字与印刷,也等于说Excel是把查看和打字与印刷网格线作为五个设置来拍卖的,存款和储蓄的Record也是例外的。

要是要在打字与印刷时呈现/隐藏网格线,你能够用HSSFSheet.IsGridlinesPrinted属性,暗中认可值为false(这就是私下认可意况下打字与印刷看不到网格线的原委)。代码和方面差不多:

在NPOI中,假如要让网格线在查阅时显得/隐藏,你能够HSSFSheet.DisplayGridlines属性,默许值为true(那也是怎么暗中同意景况下咱们能够见到网格线)。上面包车型大巴代码就是让网格线在查看时不可知的:

s1.IsGridsPrinted=true;

HSSFWorkbook hssfworkbook = new HSSFWorkbook();

下面的代码将在打字与印刷时体现网格线,打字与印刷的效应如下所示。

HSSFSheet s1 = hssfworkbook.CreateSheet(“Sheet1”);

 

s1.DisplayGridlines = false;

 

假定要在打字与印刷时显示/隐藏网格线,你能够用HSSFSheet.IsGridlinesPrinted属性,暗许值为false(那正是暗许情状下打印看不到网格线的来头)。代码和下边差不离:

 

s1.IsGridsPrinted = true;

在此也提示我们,如若这些Excel最终客户有打字与印刷意向,可别忘了把IsGridPrinted属性也设置上。

上面包车型客车代码将在打字与印刷时显得网格线,打字与印刷的意义如下所示。

 

 

连锁范例能够参考NPOI 1.2规范版中的DisplayGridlinesInXls项目。

 

 

 

2.6.6用NPOI操作EXCEL--设置初叶视图的行、列

在此也指示大家,假如那一个Excel最后客户有打字与印刷意向,可别忘了把IsGridPrinted属性也设置上。

    有些时候,大家大概希望生成的Excel文件在被打开的时候自动将难点定位在有些单元格或是选中有些区域中。在NPOI中得以因而SetAsActiveCell和SetActiveCellRange等多少个章程达成。

 

第壹大家看一下安装伊始视图中当选有些单元格的不二法门:

连带范例可以参照NPOI 1.2专业版中的DisplayGridlinesInXls项目。

//use HSSFCell.SetAsActiveCell() to select B6 as the active column
HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet A”);
CreateCellArray(sheet1);
sheet1.GetRow(5).GetCell(1).SetAsActiveCell();
//set TopRow and LeftCol to make B6 the first cell in the visible area
sheet1.TopRow = 5;
sheet1.LeftCol = 1;

 

其间CreateCellArray(sheet1)方法用来写示范数据,其代码为(下同):

2.6.6
用NPOI操作EXCEL--设置起先视图的行、列

static void CreateCellArray(HSSFSheet sheet)
{
    for (int i = 0; i < 300; i++)
    {
        HSSFRow row=sheet.CreateRow(i);
        for (int j = 0; j < 150; j++)
        {
            HSSFCell cell = row.CreateCell(j);
            cell.SetCellValue(i*j);
        }
    }
}

   
某个时候,大家兴许希望生成的Excel文件在被打开的时候自动将刀口定位在某些单元格或是选中有些区域中。在NPOI中得以经过SetAsActiveCell和SetActiveCellRange等多少个艺术达成。

扭转的Excel打开时效果如下,注意B6为暗中认可选中状态,TopRow和LeftCol设置B6为方今可知区域的首先个单元格:

首先大家看一下装置开首视图中选中有些单元格的点子:

假使不安装TopRow和LeftCol属性,默许的可知域的率先个单元格为A1,如下是另一种设置活动单元格的不二法门,但绝非设置此Sheet的TopRow和LeftCol:

//use HSSFCell.SetAsActiveCell() to select B6 as the active column
HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet A”);
CreateCellArray(sheet1);
sheet1.GetRow(5).GetCell(1).SetAsActiveCell();
//set TopRow and LeftCol to make B6 the first cell in the visible area
sheet1.TopRow = 5;
sheet1.LeftCol = 1;

HSSFSheet sheet2 = hssfworkbook.CreateSheet(“Sheet B”);
sheet2.Sheet.SetActiveCell(1, 5);

内部CreateCellArray(sheet1)方法用来写示范数据,其代码为(下同):

对应生成的Excel展现为:

static void CreateCellArray(HSSFSheet sheet)
{
    for (int i = 0; i < 300; i++)
    {
        HSSFRow row=sheet.CreateRow(i);
        for (int j = 0; j < 150; j++)
        {
            HSSFCell cell = row.CreateCell(j);
            cell.SetCellValue(i*j);
        }
    }
}

而外安装有个别单元格为当选状态外,还NPOI能够设置有个别区域为当选状态:

变迁的Excel打开时效应如下,注意B6为暗中同意选中状态,TopRow和LeftCol设置B6为近年来可知区域的率先个单元格:

 

 

//use Sheet.SetActiveCellRange to select a cell range
HSSFSheet sheet3 = hssfworkbook.CreateSheet(“Sheet C”);
CreateCellArray(sheet3);
sheet3.Sheet.SetActiveCellRange(2, 5, 1, 5);

万一不安装TopRow和LeftCol属性,暗中同意的可知域的首先个单元格为A1,如下是另一种设置活动单元格的办法,但从不设置此Sheet的TopRow和LeftCol:

以上代码设置了Sheet C的选中区域为B3:F6:

HSSFSheet sheet2 = hssfworkbook.CreateSheet(“Sheet B”);
sheet2.Sheet.SetActiveCell(1, 5);

还有更强大的,设置四个选中区域:

对应生成的Excel展现为:

//use Sheet.SetActiveCellRange to select multiple cell ranges
HSSFSheet sheet4 = hssfworkbook.CreateSheet(“Sheet D”);
CreateCellArray(sheet4);
List<CellRangeAddress8Bit> cellranges = new List<CellRangeAddress8Bit>();
cellranges.Add(new CellRangeAddress8Bit(1,3,2,5));
cellranges.Add(new CellRangeAddress8Bit(6,7,8,9));
sheet4.Sheet.SetActiveCellRange(cellranges,1,6,9);

 

假如3个Excel文件中有三个Sheet,还能经过如下语句设置打开时的初阶Sheet:

除开安装有些单元格为当选状态外,还NPOI可以设置某些区域为当选状态:

hssfworkbook.ActiveSheetIndex = 2;

 

 

//use Sheet.SetActiveCellRange to select a cell range
HSSFSheet sheet3 = hssfworkbook.CreateSheet(“Sheet C”);
CreateCellArray(sheet3);
sheet3.Sheet.SetActiveCellRange(2, 5, 1, 5);

 

上述代码设置了Sheet C的选中区域为B3:F6:

2.6.7用NPOI操作EXCEL--数据有效性

 

      在多少情形下(比如Excel引入),我们只怕不容许用户在Excel随意输入一些不算数据,那时就要在模板中加一些数量有效性的认证。在Excel中,设置数据有效性的方步骤如下:
(1)先选定三个区域;
多少有效性”中设置数据有效性验证(如图)。à(2)在菜单“数据

再有更强劲的,设置多少个选中区域:

同等,利用NPOI,用代码也得以完毕:

//use Sheet.SetActiveCellRange to select multiple cell ranges
HSSFSheet sheet4 = hssfworkbook.CreateSheet(“Sheet D”);
CreateCellArray(sheet4);
List<CellRangeAddress8Bit> cellranges = new List<CellRangeAddress8Bit>();
cellranges.Add(new CellRangeAddress8Bit(1,3,2,5));
cellranges.Add(new CellRangeAddress8Bit(6,7,8,9));
sheet4.Sheet.SetActiveCellRange(cellranges,1,6,9);

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);

 

sheet1.CreateRow(0).CreateCell(0).SetCellValue(“日期列”);
CellRangeAddressList regions1 = new CellRangeAddressList(1, 65535, 0, 0);
DVConstraint constraint1 = DVConstraint.CreateDateConstraint(DVConstraint.OperatorType.BETWEEN, “1900-01-01”, “2999-12-31”, “yyyy-MM-dd”);
HSSFDataValidation dataValidate1 = new HSSFDataValidation(regions1, constraint1);
dataValidate1.CreateErrorBox(“error”, “You must input a date.”);
sheet1.AddValidationData(dataValidate1);

一经1个Excel文件中有四个Sheet,还足以由此如下语句设置打开时的起首Sheet:

上边是四个在第壹列供给输入一九零一-1-1至2999-12-31里头日期的有用验证的事例,生成的Excel效果如下,当输入违规时将付诸警告:

hssfworkbook.ActiveSheetIndex = 2;

下边对方才使用的多少个主意加以表明:
      CellRangeAddressList类表示一个区域,构造函数中的三个参数分别表示开首行序号,终止行序号,起首列序号,终止列序号。所以首先列所在区域就象征为:

 

//全体序号都从零算起,第③行标题行除外,所以率先个参数是1,65535是1个Sheet的最大行数
new CellRangeAddressList(1, 65535, 0, 0);

 

      此外,CreateDateConstraint的率先个参数除了设置成DVConstraint.OperatorType.BETWEEN外,还足以设置成如下一些值,大家能够团结三个个去试看看效果:

2.6.7
用NPOI操作EXCEL--数据有效性

      最后,dataValidate1.CreateError博克斯(title,text),用来创立出错开上下班时间的提示音信。第十个参数表示提示框的标题,第叁个参数表示提醒框的内容。

      在多少意况下(比如Excel引入),我们可能不允许用户在Excel随意输入一些失效数据,这时就要在模板中加一些数码有效性的认证。在Excel中,设置数据有效性的方步骤如下:
(1)先选定1个区域;
数据有效性”中设置数据有效性验证(如图)。à(2)在菜单“数据

知道了上面这个,创造3个整数门类的实惠验证也易于完成:

一律,利用NPOI,用代码也能够兑现:

sheet1.CreateRow(0).CreateCell(1).SetCellValue(“数值列”);
CellRangeAddressList regions2 = new CellRangeAddressList(1, 65535, 1, 1);
DVConstraint constraint2 = DVConstraint.CreateNumericConstraint(DVConstraint.ValidationType.INTEGER,DVConstraint.OperatorType.BETWEEN, “0”, “100”);
HSSFDataValidation dataValidate2 = new HSSFDataValidation(regions2, constraint2);
dataValidate2.CreateErrorBox(“error”, “You must input a numeric between 0 and 100.”);
sheet1.AddValidationData(dataValidate2);

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);

 

sheet1.CreateRow(0).CreateCell(0).SetCellValue(“日期列”);
CellRangeAddressList regions1 = new CellRangeAddressList(1, 65535, 0, 0);
DVConstraint constraint1 = DVConstraint.CreateDateConstraint(DVConstraint.OperatorType.BETWEEN, “1900-01-01”, “2999-12-31”, “yyyy-MM-dd”);
HSSFDataValidation dataValidate1 = new HSSFDataValidation(regions1, constraint1);
dataValidate1.CreateErrorBox(“error”, “You must input a date.”);
sheet1.AddValidationData(dataValidate1);

生成的Excel效果为:

地点是三个在率先列要求输入一九零四-1-1至2999-12-31以内日期的得力验证的事例,生成的Excel效果如下,当输入违规时将送交通协警告:

下一节大家将学习使用多少有效性创立下拉列表的例证。

上边对方才使用的多少个章程加以表达:
      CellRangeAddressList类表示3个区域,构造函数中的多少个参数分别代表发轫行序号,终止行序号,起初列序号,终止列序号。所以首先列所在区域就象征为:

 

//全体序号都从零算起,第叁行标题行除外,所以首先个参数是1,65535是一个Sheet的最大行数
new CellRangeAddressList(1, 65535, 0, 0);

2.6.8用NPOI操作EXCEL--生成下拉列表

      别的,CreateDateConstraint的率先个参数除了安装成DVConstraint.OperatorType.BETWEEN外,还足以设置成如下一些值,大家能够协调三个个去试看看效果:

      上一节我们讲了归纳的数据有效性验证,这一节咱们上学一下数目有效性的另2个用到--下拉列表。在Excel中,并从未类似Web中的下拉控件,其下拉功用是透过数量有效性来贯彻的。设置步骤为:
(1)选定三个要生成下拉列表的区域;
(2)设置数据有效性为体系,并在来源中填充可选下拉的值,用“,”隔断(如图)。

      最终,dataValidate1.CreateErrorBox(title,text),用来创立出错开上下班时间的提醒音讯。第6个参数表示提示框的标题,第3个参数表示提醒框的内容。

相应的法力为:

接头了上面这么些,成立贰个平头类别的可行验证也一往情深完成:

一样,利用NPOI代码也得以兑现地点的作用:

sheet1.CreateRow(0).CreateCell(1).SetCellValue(“数值列”);
CellRangeAddressList regions2 = new CellRangeAddressList(1, 65535, 1, 1);
DVConstraint constraint2 = DVConstraint.CreateNumericConstraint(DVConstraint.ValidationType.INTEGER,DVConstraint.OperatorType.BETWEEN, “0”, “100”);
HSSFDataValidation dataValidate2 = new HSSFDataValidation(regions2, constraint2);
dataValidate2.CreateErrorBox(“error”, “You must input a numeric between 0 and 100.”);
sheet1.AddValidationData(dataValidate2);

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);

 

CellRangeAddressList regions = new CellRangeAddressList(0, 65535, 0, 0);
DVConstraint constraint = DVConstraint.CreateExplicitListConstraint(new string[] { “itemA”, “itemB”, “itemC” });
HSSFDataValidation dataValidate = new HSSFDataValidation(regions, constraint);
sheet1.AddValidationData(dataValidate);

生成的Excel效果为:

上边对代码作一下简易表明:
先安装叁个亟需提供下拉的区域,关于CellRangeAddressList构造函数参数的辨证请参见上一节

下一节大家将学习应用数据有效性创造下拉列表的例子。

CellRangeAddressList regions = new CellRangeAddressList(0, 65535, 0, 0);

 

然后将下拉项作为3个数组传给CreateExplicitListConstraint作为参数创造二个羁绊,依照要控制的区域和自律创制数量有效性就能够了。

2.6.8
用NPOI操作EXCEL--生成下拉列表

      不过如此会有三个难题:Excel中允许输入的行列来源长度最大为253个字符,也等于说当下拉项的总字符串长度当先255是将会出错。那么一旦下拉项很多的情事下应当怎么处理吧?答案是透过引用的艺术。步骤如下:
先创立贰个Sheet专门用来存款和储蓄下拉项的值,并将各下拉项的值写入当中:

      上一节我们讲了简便易行的多寡有效性验证,这一节我们学习一下数量有效性的另一个应用--下拉列表。在Excel中,并从未接近Web中的下拉控件,其下拉效果是经过数据有效性来兑现的。设置步骤为:
(1)选定叁个要生成下拉列表的区域;
(2)设置数据有效性为类别,并在来自中填充可选下拉的值,用“,”隔离(如图)。

HSSFSheet sheet2 = hssfworkbook.CreateSheet(“ShtDictionary”);
sheet2.CreateRow(0).CreateCell(0).SetCellValue(“itemA”);
sheet2.CreateRow(1).CreateCell(0).SetCellValue(“itemB”);
sheet2.CreateRow(2).CreateCell(0).SetCellValue(“itemC”);

相应的作用为:

然后定义七个名号,指向刚才成立的下拉项的区域:

相同,利用NPOI代码也得以达成地点的法力:

HSSFName range = hssfworkbook.CreateName();
range.Reference = “ShtDictionary!$A1:$A3”;
range.NameName = “dicRange”;

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);

最终,设置数据约束时指向这一个称谓而不是字符数组:

CellRangeAddressList regions = new CellRangeAddressList(0, 65535, 0, 0);
DVConstraint constraint = DVConstraint.CreateExplicitListConstraint(new string[] { “itemA”, “itemB”, “itemC” });
HSSFDataValidation dataValidate = new HSSFDataValidation(regions, constraint);
sheet1.AddValidationData(dataValidate);

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);
CellRangeAddressList regions = new CellRangeAddressList(0, 65535, 0, 0);

上边对代码作一下大概表明:
先安装二个急需提供下拉的区域,关于CellRangeAddressList构造函数参数的验证请参见上一节

DVConstraint constraint = DVConstraint.CreateFormulaListConstraint(“dicRange”);
HSSFDataValidation dataValidate = new HSSFDataValidation(regions, constraint);
sheet1.AddValidationData(dataValidate);

CellRangeAddressList regions = new CellRangeAddressList(0, 65535, 0, 0);

进行那段代码,生成的Excel效果如下:

接下来将下拉项作为一个数组传给CreateExplicitListConstraint作为参数创设二个羁绊,依照要控制的区域和束缚创设数量有效性就能够了。

在名称管理器中会发现有一个名为”dicRange”的名目,指向”ShtDictionary!$A1:$A3″的下拉项区域:

      可是那样会有1个题材:Excel中允许输入的队列来源长度最大为2伍十四个字符,也正是说当下拉项的总字符串长度超过255是将会出错。那么一旦下拉项很多的动静下应该怎么处理吧?答案是透过引用的章程。步骤如下:
先创设三个Sheet专门用于存款和储蓄下拉项的值,并将各下拉项的值写入在这之中:

在数码有效性中会发现来源变成了”=dicRange”,指向上边定义的名称。而不是此前的”itemA,itemB,itemC”:

HSSFSheet sheet2 = hssfworkbook.CreateSheet(“ShtDictionary”);
sheet2.CreateRow(0).CreateCell(0).SetCellValue(“itemA”);
sheet2.CreateRow(1).CreateCell(0).SetCellValue(“itemB”);
sheet2.CreateRow(2).CreateCell(0).SetCellValue(“itemC”);

 

然后定义1个称呼,指向刚才成立的下拉项的区域:

 

HSSFName range = hssfworkbook.CreateName();
range.Reference = “ShtDictionary!$A1:$A3”;
range.NameName = “dicRange”;

NPOI
1.2教程
 –
3.1 基于.xls模板生成Excel文件

末尾,设置数据约束时指向这么些名号而不是字符数组:

作者:Tony Qu

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);
CellRangeAddressList regions = new CellRangeAddressList(0, 65535, 0, 0);

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

DVConstraint constraint = DVConstraint.CreateFormulaListConstraint(“dicRange”);
HSSFDataValidation dataValidate = new HSSFDataValidation(regions, constraint);
sheet1.AddValidationData(dataValidate);

NPOI QQ交流群: 78142590 

实施那段代码,生成的Excel效果如下:

 

在称呼管理器中会发现有一个名为”dicRange”的名号,指向”ShtDictionary!$A1:$A3″的下拉项区域:

尽管NPOI能够从头初步生成Excel文件,但在实际上生育环境中有不少现成的报表,大家不恐怕没事就去从头开首生成一个Excel,越多时候我们更乐于选取相比较偷懒的方法——那就是用模板文件。NPOI一大特点之一便是力所能及轻松读取Office
Excel
97-二零零四的格式,即便当中有NPOI不援助的VBA宏、图表以及Pivot表之类的尖端记录,NPOI也能够保险不丢掉数据(说实话,要统统能够辨识全体的Excel内部记录大致是不容许的,更何况最近又多出了Office
Excel 二零零六binary file,即.xlsb)。

在多少有效性中会发现来源变成了”=dicRange”,指向上边定义的称号。而不是在此以前的”itemA,itemB,itemC”:

今昔我们转入正题,出于演示目标,小编做了一个简短的销售量表,里面应用了文字颜色、背景象、文本居中、公式、千分位分隔符、边框等作用,当然实际的生产条件里只怕还有更为扑朔迷离的Excel模板。如下图

 

 

 

大家的先后正是要填写拾三个月的销售量,Total能够自动依照填充的值总括出总量。

NPOI 1.2学科 – 3.1
基于.xls模板生成Excel文件

(那里要提一下,今后若是大家用HTML情势输出xls,咱们亟须在服务器端做Total总括,并且那个值在下载后永远都以静态的,没有公式,固然用户要修改里面包车型的士多寡,总值也不会转移。那也是怎么NPOI一向倡导生成真正的Excel文件。)

作者:Tony Qu

代码其实很简短:

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

//read thetemplate via FileStream, it is suggested to use
FileAccess.Read to prevent filelock.

NPOI QQ交流群: 78142590 

//book1.xlsis an Excel-2007-generated file, so some new unknown BIFF
records are added.

 

FileStreamfile =new FileStream(@”template/book1.xls”,
FileMode.Open,FileAccess.Read);

就算NPOI能够从头初叶生成Excel文件,但在骨子里生育环境中有无数现成的报表,大家相当的小概没事就去从头伊始生成一个Excel,越多时候大家更乐于选择比较偷懒的方法——那正是用模板文件。NPOI一大特征之一就是力所能及轻松读取Office
Excel
97-二〇〇一的格式,固然当中有NPOI不援助的VBA宏、图表以及Pivot表之类的高等记录,NPOI也能够有限支撑不丢掉数据(说实话,要统统能够辨识全部的Excel内部记录大概是不容许的,更何况方今又多出了Office
Excel 2005 binary file,即.xlsb)。

HSSFWorkbook hssfworkbook = new HSSFWorkbook(file);
HSSFSheet sheet1 = hssfworkbook.GetSheet(“Sheet1”);
sheet1.GetRow(1).GetCell(1).SetCellValue(200200);
sheet1.GetRow(2).GetCell(1).SetCellValue(300);
sheet1.GetRow(3).GetCell(1).SetCellValue(500050);
sheet1.GetRow(4).GetCell(1).SetCellValue(8000);
sheet1.GetRow(5).GetCell(1).SetCellValue(110);
sheet1.GetRow(6).GetCell(1).SetCellValue(100);
sheet1.GetRow(7).GetCell(1).SetCellValue(200);
sheet1.GetRow(8).GetCell(1).SetCellValue(210);
sheet1.GetRow(9).GetCell(1).SetCellValue(2300);
sheet1.GetRow(10).GetCell(1).SetCellValue(240);
sheet1.GetRow(11).GetCell(1).SetCellValue(180123);
sheet1.GetRow(12).GetCell(1).SetCellValue(150);

后天我们转入正题,出于演示指标,作者做了三个简练的行销量表,里面应用了文字颜色、背景象、文本居中、公式、千分位分隔符、边框等职能,当然实际的生产条件里或然还有进一步错综复杂的Excel模板。如下图

//Force excel to recalculate all the formulawhile open

 

sheet1.ForceFormulaRecalculation=true;

小编们的顺序正是要填写10个月的销售量,Total能够活动依照填充的值总括出总量。

FileStreamfile = new FileStream(@”test.xls”, FileMode.Create);
hssfworkbook.Write(file);
file.Close();

(那里要提一下,以后一经我们用HTML方式输出xls,我们亟须在劳务器端做Total总结,并且这一个值在下载后永远都以静态的,没有公式,就算用户要修改里面包车型客车数额,总值也不会转移。这也是为啥NPOI一向提倡生成真正的Excel文件。)

先是打开模板文件时要选拔FileAccess.Read,那样能够保障文件不被侵吞。

代码其实相当粗略:

那里的ForceFormulaRecalculation是强制须要Excel在开辟时再次计算的习性,在富有公式的xls文件中10分有用,我们利用时可别忘了设。

//read the template via FileStream, it is suggested to use
FileAccess.Read to prevent file lock.

 

//book1.xls is an Excel-2007-generated file, so some new unknown BIFF
records are added.

是还是不是比你想象的大概?你甚至不用去明白它是在什么时候读取文件内容的,对于NPOI的使用者来说基本上和读取普通文书并未什么分裂。

FileStream file = new FileStream(@”template/book1.xls”,
FileMode.Open,FileAccess.Read);

 

HSSFWorkbook hssfworkbook = new HSSFWorkbook(file);
HSSFSheet sheet1 = hssfworkbook.GetSheet(“Sheet1”);
sheet1.GetRow(1).GetCell(1).SetCellValue(200200);
sheet1.GetRow(2).GetCell(1).SetCellValue(300);
sheet1.GetRow(3).GetCell(1).SetCellValue(500050);
sheet1.GetRow(4).GetCell(1).SetCellValue(8000);
sheet1.GetRow(5).GetCell(1).SetCellValue(110);
sheet1.GetRow(6).GetCell(1).SetCellValue(100);
sheet1.GetRow(7).GetCell(1).SetCellValue(200);
sheet1.GetRow(8).GetCell(1).SetCellValue(210);
sheet1.GetRow(9).GetCell(1).SetCellValue(2300);
sheet1.GetRow(10).GetCell(1).SetCellValue(240);
sheet1.GetRow(11).GetCell(1).SetCellValue(180123);
sheet1.GetRow(12).GetCell(1).SetCellValue(150);

最终生成的成效如下所示:

//Force excel to recalculate all the formula while open

 

sheet1.ForceFormulaRecalculation = true;

 

FileStream file = new FileStream(@”test.xls”, FileMode.Create);
hssfworkbook.Write(file);
file.Close();

 

先是打开模板文件时要选取FileAccess.Read,那样能够确认保证文件不被并吞。

察觉没,就连千分位分隔符也都封存着,一切就好像人工填写的同一。

此地的ForceFormulaRecalculation是威迫需求Excel在打开时再一次总结的属性,在享有公式的xls文件中至极有用,大家利用时可别忘了设。

 

 

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

是或不是比你想像的总结?你居然不用去通晓它是在曾几何时读取文件内容的,对于NPOI的使用者来说基本上和读取普通文书没有怎么不一致。

 

 

3.2用NPOI操作EXCEL--生成九九乘法表

终极生成的法力如下所示:

      还记得小学时候学的九九乘法表吗?那节大家一道上学生运动用NPOI通过C#代码生成一张Excel的九九乘法表。要生成九九乘法表,循环肯定是须求的,如下:

 

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);
HSSFRow row;
HSSFCell cell;
for (int rowIndex = 0; rowIndex < 9; rowIndex++)
{
     row = sheet1.CreateRow(rowIndex);
     for (int colIndex = 0; colIndex <= rowIndex; colIndex++)
     {
           cell = row.CreateCell(colIndex);
           cell.SetCellValue(String.Format(“{0}*{1}={2}”, rowIndex + 1, colIndex + 1, (rowIndex + 1) * (colIndex + 1)));
     }
}

 

      代码其实很简短,就是循环调用cell.SetCellValue(str)写入9行数据,每一行写的单元格数量随行数递增。执行完后变化的Excel样式如下:

 

完全的代码如下:

发觉没,就连千分位分隔符也都保存着,一切就像人工填写的同等。

Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NPOI.HSSF.UserModel;
using System.IO;
using NPOI.HPSF;

 

namespace TimesTables
{
    public class Program
    {
        static HSSFWorkbook hssfworkbook;

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

        static void Main(string[] args)
        {
            InitializeWorkbook();

 

            HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);
            HSSFRow row;
            HSSFCell cell;
            for (int rowIndex = 0; rowIndex < 9; rowIndex++)
            {
                row = sheet1.CreateRow(rowIndex);
                for (int colIndex = 0; colIndex <= rowIndex; colIndex++)
                {
                    cell = row.CreateCell(colIndex);
                    cell.SetCellValue(String.Format(“{0}*{1}={2}”, rowIndex + 1, colIndex + 1, (rowIndex + 1) * (colIndex + 1)));
                }
            }

3.2
用NPOI操作EXCEL--生成九九乘法表

            WriteToFile();
        }

      还记得小学时候学的九九乘法表吗?那节大家一起学学应用NPOI通过C#代码生成一张Excel的九九乘法表。要生成九九乘法表,循环肯定是必需的,如下:

        static void WriteToFile()
        {
            //Write the stream data of workbook to the root directory
            FileStream file = new FileStream(@”test.xls”, FileMode.Create);
            hssfworkbook.Write(file);
            file.Close();
        }

HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);
HSSFRow row;
HSSFCell cell;
for (int rowIndex = 0; rowIndex < 9; rowIndex++)
{
     row = sheet1.CreateRow(rowIndex);
     for (int colIndex = 0; colIndex <= rowIndex; colIndex++)
     {
           cell = row.CreateCell(colIndex);
           cell.SetCellValue(String.Format(“{0}*{1}={2}”, rowIndex + 1, colIndex + 1, (rowIndex + 1) * (colIndex + 1)));
     }
}

        static void InitializeWorkbook()
        {
            hssfworkbook = new HSSFWorkbook();

      代码其实相当的粗略,就是循环调用cell.SetCellValue(str)写入9行数据,每一行写的单元格数量随行数递增。执行完后转变的Excel样式如下:

            //create a entry of DocumentSummaryInformation
            DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
            dsi.Company = “NPOI Team”;
            hssfworkbook.DocumentSummaryInformation = dsi;

完全的代码如下:

            //create a entry of SummaryInformation
            SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
            si.Subject = “NPOI SDK Example”;
            hssfworkbook.SummaryInformation = si;
        }
    }
}

Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NPOI.HSSF.UserModel;
using System.IO;
using NPOI.HPSF;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NPOI.HSSF.UserModel;
using System.IO;
using NPOI.HPSF;

namespace TimesTables
{
    public class Program
    {
        static HSSFWorkbook hssfworkbook;

namespace TimesTables
{
    public class Program
    {
        static HSSFWorkbook hssfworkbook;

        static void Main(string[] args)
        {
            InitializeWorkbook();

        static void Main(string[] args)
        {
            InitializeWorkbook();

            HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);
            HSSFRow row;
            HSSFCell cell;
            for (int rowIndex = 0; rowIndex < 9; rowIndex++)
            {
                row = sheet1.CreateRow(rowIndex);
                for (int colIndex = 0; colIndex <= rowIndex; colIndex++)
                {
                    cell = row.CreateCell(colIndex);
                    cell.SetCellValue(String.Format(“{0}*{1}={2}”, rowIndex + 1, colIndex + 1, (rowIndex + 1) * (colIndex + 1)));
                }
            }

            HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);
            HSSFRow row;
            HSSFCell cell;
            for (int rowIndex = 0; rowIndex < 9; rowIndex++)
            {
                row = sheet1.CreateRow(rowIndex);
                for (int colIndex = 0; colIndex <= rowIndex; colIndex++)
                {
                    cell = row.CreateCell(colIndex);
                    cell.SetCellValue(String.Format(“{0}*{1}={2}”, rowIndex + 1, colIndex + 1, (rowIndex + 1) * (colIndex + 1)));
                }
            }

            WriteToFile();
        }

            WriteToFile();
        }

        static void WriteToFile()
        {
            //Write the stream data of workbook to the root directory
            FileStream file = new FileStream(@”test.xls”, FileMode.Create);
            hssfworkbook.Write(file);
            file.Close();
        }

        static void WriteToFile()
        {
            //Write the stream data of workbook to the root directory
            FileStream file = new FileStream(@”test.xls”, FileMode.Create);
            hssfworkbook.Write(file);
            file.Close();
        }

        static void InitializeWorkbook()
        {
            hssfworkbook = new HSSFWorkbook();

        static void InitializeWorkbook()
        {
            hssfworkbook = new HSSFWorkbook();

            //create a entry of DocumentSummaryInformation
            DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
            dsi.Company = “NPOI Team”;
            hssfworkbook.DocumentSummaryInformation = dsi;

            //create a entry of DocumentSummaryInformation
            DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
            dsi.Company = “NPOI Team”;
            hssfworkbook.DocumentSummaryInformation = dsi;

            //create a entry of SummaryInformation
            SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
            si.Subject = “NPOI SDK Example”;
            hssfworkbook.SummaryInformation = si;
        }
    }
}

            //create a entry of SummaryInformation
            SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
            si.Subject = “NPOI SDK Example”;
            hssfworkbook.SummaryInformation = si;
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NPOI.HSSF.UserModel;
using System.IO;
using NPOI.HPSF;

 

namespace TimesTables
{
    public class Program
    {
        static HSSFWorkbook hssfworkbook;

3.3用NPOI操作EXCEL--生成一张薪酬单

        static void Main(string[] args)
        {
            InitializeWorkbook();

      这一节,大家将综合NPOI的常用成效(蕴含创设和填充单元格、合并单元格、设置单元格样式和使用公式),做三个薪资单的实例。先看创设标题行的代码:

            HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);
            HSSFRow row;
            HSSFCell cell;
            for (int rowIndex = 0; rowIndex < 9; rowIndex++)
            {
                row = sheet1.CreateRow(rowIndex);
                for (int colIndex = 0; colIndex <= rowIndex; colIndex++)
                {
                    cell = row.CreateCell(colIndex);
                    cell.SetCellValue(String.Format(“{0}*{1}={2}”, rowIndex + 1, colIndex + 1, (rowIndex + 1) * (colIndex + 1)));
                }
            }

//写标题文本
HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);
HSSFCell cellTitle = sheet1.CreateRow(0).CreateCell(0);
cellTitle.SetCellValue(“XXX集团2010年7月薪金单”);

            WriteToFile();
        }

//设置标题行样式
HSSFCellStyle style = hssfworkbook.CreateCellStyle();
style.Alignment = HSSFCellStyle.ALIGN_CENTER;
HSSFFont font = hssfworkbook.CreateFont();
font.FontHeight = 20 * 20;
style.SetFont(font);

        static void WriteToFile()
        {
            //Write the stream data of workbook to the root directory
            FileStream file = new FileStream(@”test.xls”, FileMode.Create);
            hssfworkbook.Write(file);
            file.Close();
        }

cellTitle.CellStyle = style;

        static void InitializeWorkbook()
        {
            hssfworkbook = new HSSFWorkbook();

//合并标题行
sheet1.AddMergedRegion(new Region(0, 0, 1, 6));

            //create a entry of DocumentSummaryInformation
            DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
            dsi.Company = “NPOI Team”;
            hssfworkbook.DocumentSummaryInformation = dsi;

中间使用了俺们前面讲的安装单元格样式和归并单元格等情节。接下来我们循环创设公司各种职工的薪俸单:

            //create a entry of SummaryInformation
            SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
            si.Subject = “NPOI SDK Example”;
            hssfworkbook.SummaryInformation = si;
        }
    }
}

DataTable dt=GetData();
HSSFRow row;
HSSFCell cell;
HSSFCellStyle celStyle=getCellStyle();

 

HSSFPatriarch patriarch = sheet1.CreateDrawingPatriarch();
HSSFClientAnchor anchor;
HSSFSimpleShape line;
int rowIndex;
for (int i = 0; i < dt.Rows.Count; i++)
{
    //表头数据
    rowIndex = 3 * (i + 1);
    row = sheet1.CreateRow(rowIndex);

3.3
用NPOI操作EXCEL--生成一张薪金单

    cell = row.CreateCell(0);
    cell.SetCellValue(“姓名”);
    cell.CellStyle = celStyle;

      这一节,大家将汇总NPOI的常用功效(包蕴创制和填充单元格、合并单元格、设置单元格样式和应用公式),做一个薪资单的实例。先看创造标题行的代码:

    cell = row.CreateCell(1);
    cell.SetCellValue(“基本薪金”);
    cell.CellStyle = celStyle;

//写标题文本
HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);
HSSFCell cellTitle = sheet1.CreateRow(0).CreateCell(0);
cellTitle.SetCellValue(“XXX集团2008年六月薪酬单”);

    cell = row.CreateCell(2);
    cell.SetCellValue(“住房公积金”);
    cell.CellStyle = celStyle;

//设置标题行样式
HSSFCellStyle style = hssfworkbook.CreateCellStyle();
style.Alignment = HSSFCellStyle.ALIGN_CENTER;
HSSFFont font = hssfworkbook.CreateFont();
font.FontHeight = 20 * 20;
style.SetFont(font);

    cell = row.CreateCell(3);
    cell.SetCellValue(“绩效奖金”);
    cell.CellStyle = celStyle;

cellTitle.CellStyle = style;

    cell = row.CreateCell(4);
    cell.SetCellValue(“社会养老保险扣款”);
    cell.CellStyle = celStyle;

//合并标题行
sheet1.AddMergedRegion(new Region(0, 0, 1, 6));

    cell = row.CreateCell(5);
    cell.SetCellValue(“代扣个人所得税”);
    cell.CellStyle = celStyle;

在那之中使用了咱们前边讲的设置单元格样式和集合单元格等剧情。接下来大家循环创制集团各种职工的薪资单:

    cell = row.CreateCell(6);
    cell.SetCellValue(“实发薪俸”);
    cell.CellStyle = celStyle;

DataTable dt=GetData();
HSSFRow row;
HSSFCell cell;
HSSFCellStyle celStyle=getCellStyle();

    DataRow dr = dt.Rows[i];
    //设置值和总计公式
    row = sheet1.CreateRow(rowIndex + 1);
    cell = row.CreateCell(0);
    cell.SetCellValue(dr[“FName”].ToString());
    cell.CellStyle = celStyle;

HSSFPatriarch patriarch = sheet1.CreateDrawingPatriarch();
HSSFClientAnchor anchor;
HSSFSimpleShape line;
int rowIndex;
for (int i = 0; i < dt.Rows.Count; i++)
{
    //表头数据
    rowIndex = 3 * (i + 1);
    row = sheet1.CreateRow(rowIndex);

    cell = row.CreateCell(1);
    cell.SetCellValue((double)dr[“FBasicSalary”]);
    cell.CellStyle = celStyle;

    cell = row.CreateCell(0);
    cell.SetCellValue(“姓名”);
    cell.CellStyle = celStyle;

    cell = row.CreateCell(2);
    cell.SetCellValue((double)dr[“FAccumulationFund”]);
    cell.CellStyle = celStyle;

    cell = row.CreateCell(1);
    cell.SetCellValue(“基本薪水”);
    cell.CellStyle = celStyle;

    cell = row.CreateCell(3);
    cell.SetCellValue((double)dr[“FBonus”]);
    cell.CellStyle = celStyle;

    cell = row.CreateCell(2);
    cell.SetCellValue(“住房公积金”);
    cell.CellStyle = celStyle;

    cell = row.CreateCell(4);
    cell.SetCellFormula(String.Format(“$B{0}*0.08”,rowIndex+2));
    cell.CellStyle = celStyle;

    cell = row.CreateCell(3);
    cell.SetCellValue(“绩效奖金”);
    cell.CellStyle = celStyle;

    cell = row.CreateCell(5);
    cell.SetCellFormula(String.Format(“SUM($B{0}:$D{0})*0.1”,rowIndex+2));
    cell.CellStyle = celStyle;

    cell = row.CreateCell(4);
    cell.SetCellValue(“社会养老保险扣款”);
    cell.CellStyle = celStyle;

    cell = row.CreateCell(6);
    cell.SetCellFormula(String.Format(“SUM($B{0}:$D{0})-SUM($E{0}:$F{0})”,rowIndex+2));
    cell.CellStyle = celStyle;

    cell = row.CreateCell(5);
    cell.SetCellValue(“代扣个税”);
    cell.CellStyle = celStyle;

    //绘制分隔线
    sheet1.AddMergedRegion(new Region(rowIndex+2, 0, rowIndex+2, 6));
    anchor = new HSSFClientAnchor(0, 125, 1023, 125, 0, rowIndex + 2, 6, rowIndex + 2);
    line = patriarch.CreateSimpleShape(anchor);
    line.ShapeType = HSSFSimpleShape.OBJECT_TYPE_LINE;
    line.LineStyle = HSSFShape.LINESTYLE_DASHGEL;

    cell = row.CreateCell(6);
    cell.SetCellValue(“实发报酬”);
    cell.CellStyle = celStyle;

}

    DataRow dr = dt.Rows[i];
    //设置值和总括公式
    row = sheet1.CreateRow(rowIndex + 1);
    cell = row.CreateCell(0);
    cell.SetCellValue(dr[“FName”].ToString());
    cell.CellStyle = celStyle;

在那之中为了文印为单元格增添了淡褐边框的样式(假如不设置边框样式,打字与印刷出来后是不曾边框的)。此外,注意循环进程中excel中的行号随数据源中的行号变化处理。完整代码如下:

    cell = row.CreateCell(1);
    cell.SetCellValue((double)dr[“FBasicSalary”]);
    cell.CellStyle = celStyle;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NPOI.HSSF.UserModel;
using System.IO;
using NPOI.HPSF;
using NPOI.HSSF.Util;
using System.Data;

    cell = row.CreateCell(2);
    cell.SetCellValue((double)dr[“FAccumulationFund”]);
    cell.CellStyle = celStyle;

namespace Payroll
{
    public class Program
    {
        static HSSFWorkbook hssfworkbook;

    cell = row.CreateCell(3);
    cell.SetCellValue((double)dr[“FBonus”]);
    cell.CellStyle = celStyle;

        static void Main(string[] args)
        {
            InitializeWorkbook();

    cell = row.CreateCell(4);
    cell.SetCellFormula(String.Format(“$B{0}*0.08”,rowIndex+2));
    cell.CellStyle = celStyle;

            //写标题文本
            HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);
            HSSFCell cellTitle = sheet1.CreateRow(0).CreateCell(0);
            cellTitle.SetCellValue(“XXX集团二零零六年3月薪酬单”);

    cell = row.CreateCell(5);
    cell.SetCellFormula(String.Format(“SUM($B{0}:$D{0})*0.1”,rowIndex+2));
    cell.CellStyle = celStyle;

            //设置标题行样式
            HSSFCellStyle style = hssfworkbook.CreateCellStyle();
            style.Alignment = HSSFCellStyle.ALIGN_CENTER;
            HSSFFont font = hssfworkbook.CreateFont();
            font.FontHeight = 20 * 20;
            style.SetFont(font);

    cell = row.CreateCell(6);
    cell.SetCellFormula(String.Format(“SUM($B{0}:$D{0})-SUM($E{0}:$F{0})”,rowIndex+2));
    cell.CellStyle = celStyle;

            cellTitle.CellStyle = style;

    //绘制分隔线
    sheet1.AddMergedRegion(new Region(rowIndex+2, 0, rowIndex+2, 6));
    anchor = new HSSFClientAnchor(0, 125, 1023, 125, 0, rowIndex + 2, 6, rowIndex + 2);
    line = patriarch.CreateSimpleShape(anchor);
    line.ShapeType = HSSFSimpleShape.OBJECT_TYPE_LINE;
    line.LineStyle = HSSFShape.LINESTYLE_DASHGEL;

            //合并标题行
            sheet1.AddMergedRegion(new Region(0, 0, 1, 6));

}

            DataTable dt=GetData();
            HSSFRow row;
            HSSFCell cell;
            HSSFCellStyle celStyle=getCellStyle();

在那之中为了文印为单元格扩大了石黄边框的体制(倘诺不安装边框样式,打字与印刷出来后是未曾边框的)。其余,注意循环进度中excel中的行号随数据源中的行号变化处理。完整代码如下:

            HSSFPatriarch patriarch = sheet1.CreateDrawingPatriarch();
            HSSFClientAnchor anchor;
            HSSFSimpleShape line;
            int rowIndex;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                //表头数据
                rowIndex = 3 * (i + 1);
                row = sheet1.CreateRow(rowIndex);

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NPOI.HSSF.UserModel;
using System.IO;
using NPOI.HPSF;
using NPOI.HSSF.Util;
using System.Data;

                cell = row.CreateCell(0);
                cell.SetCellValue(“姓名”);
                cell.CellStyle = celStyle;

namespace Payroll
{
    public class Program
    {
        static HSSFWorkbook hssfworkbook;

                cell = row.CreateCell(1);
                cell.SetCellValue(“基本薪酬”);
                cell.CellStyle = celStyle;

        static void Main(string[] args)
        {
            InitializeWorkbook();

                cell = row.CreateCell(2);
                cell.SetCellValue(“住房公积金”);
                cell.CellStyle = celStyle;

            //写标题文本
            HSSFSheet sheet1 = hssfworkbook.CreateSheet(“Sheet1”);
            HSSFCell cellTitle = sheet1.CreateRow(0).CreateCell(0);
            cellTitle.SetCellValue(“XXX集团二零一零年八月薪给单”);

                cell = row.CreateCell(3);
                cell.SetCellValue(“绩效奖金”);
                cell.CellStyle = celStyle;

            //设置标题行样式
            HSSFCellStyle style = hssfworkbook.CreateCellStyle();
            style.Alignment = HSSFCellStyle.ALIGN_CENTER;
            HSSFFont font = hssfworkbook.CreateFont();
            font.FontHeight = 20 * 20;
            style.SetFont(font);

                cell = row.CreateCell(4);
                cell.SetCellValue(“社会养老保险扣款”);
                cell.CellStyle = celStyle;

            cellTitle.CellStyle = style;

                cell = row.CreateCell(5);
                cell.SetCellValue(“代扣个人所得税”);
                cell.CellStyle = celStyle;

            //合并标题行
            sheet1.AddMergedRegion(new Region(0, 0, 1, 6));

                cell = row.CreateCell(6);
                cell.SetCellValue(“实发薪资”);
                cell.CellStyle = celStyle;

            DataTable dt=GetData();
            HSSFRow row;
            HSSFCell cell;
            HSSFCellStyle celStyle=getCellStyle();

                DataRow dr = dt.Rows[i];
                //设置值和总括公式
                row = sheet1.CreateRow(rowIndex + 1);
                cell = row.CreateCell(0);
                cell.SetCellValue(dr[“FName”].ToString());
                cell.CellStyle = celStyle;

            HSSFPatriarch patriarch = sheet1.CreateDrawingPatriarch();
            HSSFClientAnchor anchor;
            HSSFSimpleShape line;
            int rowIndex;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                //表头数据
                rowIndex = 3 * (i + 1);
                row = sheet1.CreateRow(rowIndex);

                cell = row.CreateCell(1);
                cell.SetCellValue((double)dr[“FBasicSalary”]);
                cell.CellStyle = celStyle;

                cell = row.CreateCell(0);
                cell.SetCellValue(“姓名”);
                cell.CellStyle = celStyle;

                cell = row.CreateCell(2);
                cell.SetCellValue((double)dr[“FAccumulationFund”]);
                cell.CellStyle = celStyle;

                cell = row.CreateCell(1);
                cell.SetCellValue(“基本工资”);
                cell.CellStyle = celStyle;

                cell = row.CreateCell(3);
                cell.SetCellValue((double)dr[“FBonus”]);
                cell.CellStyle = celStyle;

                cell = row.CreateCell(2);
                cell.SetCellValue(“住房公积金”);
                cell.CellStyle = celStyle;

                cell = row.CreateCell(4);
                cell.SetCellFormula(String.Format(“$B{0}*0.08”,rowIndex+2));
                cell.CellStyle = celStyle;

                cell = row.CreateCell(3);
                cell.SetCellValue(“绩效奖金”);
                cell.CellStyle = celStyle;

                cell = row.CreateCell(5);
                cell.SetCellFormula(String.Format(“SUM($B{0}:$D{0})*0.1”,rowIndex+2));
                cell.CellStyle = celStyle;

                cell = row.CreateCell(4);
                cell.SetCellValue(“社会养老保险扣款”);
                cell.CellStyle = celStyle;

                cell = row.CreateCell(6);
                cell.SetCellFormula(String.Format(“SUM($B{0}:$D{0})-SUM($E{0}:$F{0})”,rowIndex+2));
                cell.CellStyle = celStyle;

                cell = row.CreateCell(5);
                cell.SetCellValue(“代扣个人所得税”);
                cell.CellStyle = celStyle;

                //绘制分隔线
                sheet1.AddMergedRegion(new Region(rowIndex+2, 0, rowIndex+2, 6));
                anchor = new HSSFClientAnchor(0, 125, 1023, 125, 0, rowIndex + 2, 6, rowIndex + 2);
                line = patriarch.CreateSimpleShape(anchor);
                line.ShapeType = HSSFSimpleShape.OBJECT_TYPE_LINE;
                line.LineStyle = HSSFShape.LINESTYLE_DASHGEL;

                cell = row.CreateCell(6);
                cell.SetCellValue(“实发报酬”);
                cell.CellStyle = celStyle;

            }

                DataRow dr = dt.Rows[i];
                //设置值和总括公式
                row = sheet1.CreateRow(rowIndex + 1);
                cell = row.CreateCell(0);
                cell.SetCellValue(dr[“FName”].ToString());
                cell.CellStyle = celStyle;

            WriteToFile();
        }

                cell = row.CreateCell(1);
                cell.SetCellValue((double)dr[“FBasicSalary”]);
                cell.CellStyle = celStyle;

        static DataTable GetData()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add(“FName”,typeof(System.String));
            dt.Columns.Add(“FBasicSalary”,typeof(System.Double));
            dt.Columns.Add(“FAccumulationFund”, typeof(System.Double));
            dt.Columns.Add(“FBonus”, typeof(System.Double));

                cell = row.CreateCell(2);
                cell.SetCellValue((double)dr[“FAccumulationFund”]);
                cell.CellStyle = celStyle;

            dt.Rows.Add(“令狐冲”, 6000, 1000, 2000);
            dt.Rows.Add(“任盈盈”, 7000, 1000, 2500);
            dt.Rows.Add(“林平之”, 5000, 1000, 1500);
            dt.Rows.Add(“岳灵珊”, 4000, 1000, 900);
            dt.Rows.Add(“任我行”, 4000, 1000, 800);
            dt.Rows.Add(“风清扬”, 9000, 5000, 3000);

                cell = row.CreateCell(3);
                cell.SetCellValue((double)dr[“FBonus”]);
                cell.CellStyle = celStyle;

            return dt;
        }

                cell = row.CreateCell(4);
                cell.SetCellFormula(String.Format(“$B{0}*0.08”,rowIndex+2));
                cell.CellStyle = celStyle;

        
        static HSSFCellStyle getCellStyle()
        {
            HSSFCellStyle cellStyle = hssfworkbook.CreateCellStyle();
            cellStyle.BorderBottom = HSSFCellStyle.BORDER_THIN;
            cellStyle.BorderLeft = HSSFCellStyle.BORDER_THIN;
            cellStyle.BorderRight = HSSFCellStyle.BORDER_THIN;
            cellStyle.BorderTop = HSSFCellStyle.BORDER_THIN;
            return cellStyle;
        }

                cell = row.CreateCell(5);
                cell.SetCellFormula(String.Format(“SUM($B{0}:$D{0})*0.1”,rowIndex+2));
                cell.CellStyle = celStyle;

        static void WriteToFile()
        {
            //Write the stream data of workbook to the root directory
            FileStream file = new FileStream(@”test.xls”, FileMode.Create);
            hssfworkbook.Write(file);
            file.Close();
        }

                cell = row.CreateCell(6);
                cell.SetCellFormula(String.Format(“SUM($B{0}:$D{0})-SUM($E{0}:$F{0})”,rowIndex+2));
                cell.CellStyle = celStyle;

        static void InitializeWorkbook()
        {
            hssfworkbook = new HSSFWorkbook();

                //绘制分隔线
                sheet1.AddMergedRegion(new Region(rowIndex+2, 0, rowIndex+2, 6));
                anchor = new HSSFClientAnchor(0, 125, 1023, 125, 0, rowIndex + 2, 6, rowIndex + 2);
                line = patriarch.CreateSimpleShape(anchor);
                line.ShapeType = HSSFSimpleShape.OBJECT_TYPE_LINE;
                line.LineStyle = HSSFShape.LINESTYLE_DASHGEL;

            //create a entry of DocumentSummaryInformation
            DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
            dsi.Company = “NPOI Team”;
            hssfworkbook.DocumentSummaryInformation = dsi;

            }

            //create a entry of SummaryInformation
            SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
            si.Subject = “NPOI SDK Example”;
            hssfworkbook.SummaryInformation = si;
        }
    }
}

            WriteToFile();
        }

转变的Excel文件样式如下:

        static DataTable GetData()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add(“FName”,typeof(System.String));
            dt.Columns.Add(“FBasicSalary”,typeof(System.Double));
            dt.Columns.Add(“FAccumulationFund”, typeof(System.Double));
            dt.Columns.Add(“FBonus”, typeof(System.Double));

 

            dt.Rows.Add(“令狐冲”, 6000, 1000, 2000);
            dt.Rows.Add(“任盈盈”, 7000, 1000, 2500);
            dt.Rows.Add(“林平之”, 5000, 1000, 1500);
            dt.Rows.Add(“岳灵珊”, 4000, 1000, 900);
            dt.Rows.Add(“任我行”, 4000, 1000, 800);
            dt.Rows.Add(“风清扬”, 9000, 5000, 3000);

 

            return dt;
        }

3.4用NPOI操作EXCEL--从Excel中抽取文本

        
        static HSSFCellStyle getCellStyle()
        {
            HSSFCellStyle cellStyle = hssfworkbook.CreateCellStyle();
            cellStyle.BorderBottom = HSSFCellStyle.BORDER_THIN;
            cellStyle.BorderLeft = HSSFCellStyle.BORDER_THIN;
            cellStyle.BorderRight = HSSFCellStyle.BORDER_THIN;
            cellStyle.BorderTop = HSSFCellStyle.BORDER_THIN;
            return cellStyle;
        }

  大家知晓,搜索引擎最善于处理的就是文本,而Excel中的内容并不是以文件格局存款和储蓄的。那么只要想要搜索引擎爬虫能够抓取到Excel中的内容是相比困难的,除非搜索引擎爬虫对Excel格式进行越发的处理。那么有没有方法消除此题材吗?有,通过NPOI将Excel内容文本化!

        static void WriteToFile()
        {
            //Write the stream data of workbook to the root directory
            FileStream file = new FileStream(@”test.xls”, FileMode.Create);
            hssfworkbook.Write(file);
            file.Close();
        }

  如下,有那样一张Excel,尽管想让它被寻找引擎收音和录音,常用的办法是以HTML方式表现,但将3个个这么的Excel手工做成HTML页面显著比较费心。接下来,大家将提供一种方案,自动将Excel中的内容以HTML情势表现。

        static void InitializeWorkbook()
        {
            hssfworkbook = new HSSFWorkbook();

  其实基本考虑也极粗略,就是经过NPOI读取每一种Cell中的内容,然后以HTML的花样出口。但要保险输出的HTML页面布局与Excel中的一致,还有点小技巧。下边是组织Table的代码:

            //create a entry of DocumentSummaryInformation
            DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
            dsi.Company = “NPOI Team”;
            hssfworkbook.DocumentSummaryInformation = dsi;

private HSSFSheet sht;
protected String excelContent;

            //create a entry of SummaryInformation
            SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
            si.Subject = “NPOI SDK Example”;
            hssfworkbook.SummaryInformation = si;
        }
    }
}

protected void Page_Load(object sender, EventArgs e)
{
    HSSFWorkbook wb = new HSSFWorkbook(new FileStream(Server.MapPath(“App_Data/quotation.xls”), FileMode.Open));
    sht = wb.GetSheet(“Sheet1”);

扭转的Excel文件样式如下:

    //取行Excel的最大行数
    int rowsCount = sht.PhysicalNumberOfRows;
    //为有限支撑Table布局与Excel一样,这里应该取全部行中的最大列数(须求遍历整个Sheet)。
    //为少一交全Excel遍历,提升品质,大家可以人为把第0行的列数调整至全体行中的最大列数。
    int colsCount = sht.GetRow(0).PhysicalNumberOfCells;

 

    int colSpan;
    int rowSpan;
    bool isByRowMerged;

 

    StringBuilder table = new StringBuilder(rowsCount * 32);

3.4
用NPOI操作EXCEL--从Excel中抽取文本

    table.Append(“<table border=’1px’>”);
    for (int rowIndex = 0; rowIndex < rowsCount; rowIndex++)
    {
        table.Append(“<tr>”);
        for (int colIndex = 0; colIndex < colsCount; colIndex++)
        {
            GetTdMergedInfo(rowIndex, colIndex, out colSpan, out rowSpan, out isByRowMerged);
            //即便已经被行合并包罗进去了就不出口TD了。
            //注意被统一的行或列不出口的处理方式不同,见下边一处的注演说明了列合并后不出口TD的处理格局。
            if (isByRowMerged)
            {
                continue;
            }
            
            table.Append(“<td”);
            if (colSpan > 1)
                table.Append(string.Format(” colSpan={0}”, colSpan));
            if (rowSpan > 1)
                table.Append(string.Format(” rowSpan={0}”, rowSpan));
            table.Append(“>”);

  我们了解,搜索引擎最善于处理的便是文件,而Excel中的内容并不是以文件情势存款和储蓄的。那么只要想要搜索引擎爬虫能够抓取到Excel中的内容是比较困难的,除非搜索引擎爬虫对Excel格式实行专门的拍卖。那么有没有方法缓解此题材啊?有,通过NPOI将Excel内容文本化!

            table.Append(sht.GetRow(rowIndex).GetCell(colIndex));

  如下,有那样一张Excel,要是想让它被寻找引擎收音和录音,常用的措施是以HTML方式突显,但将三个个那样的Excel手工业做成HTML页面分明相比费劲。接下来,大家将提供一种方案,自动将Excel中的内容以HTML格局彰显。

            //列被统一之后此行将少输出colSpan-一个TD。
            if (colSpan > 1)
                colIndex += colSpan – 1;

 

            table.Append(“</td>”);

  其实基本考虑也很不难,正是通过NPOI读取每一个Cell中的内容,然后以HTML的情势出口。但要保障输出的HTML页面布局与Excel中的一致,还有点小技巧。上面是布局Table的代码:

        }
        table.Append(“</tr>”);
    }
    table.Append(“</table>”);

private HSSFSheet sht;
protected String excelContent;

    this.excelContent = table.ToString();
}

protected void Page_Load(object sender, EventArgs e)
{
    HSSFWorkbook wb = new HSSFWorkbook(new FileStream(Server.MapPath(“App_Data/quotation.xls”), FileMode.Open));
    sht = wb.GetSheet(“Sheet1”);

  当中使用的GetTdMergedInfo方法代码如下:

    //取行Excel的最大行数
    int rowsCount = sht.PhysicalNumberOfRows;
    //为保障Table布局与Excel一样,那里应该取全部行中的最大列数(须求遍历整个Sheet)。
    //为少一交全Excel遍历,提升品质,我们能够人为把第0行的列数调整至全数行中的最大列数。
    int colsCount = sht.GetRow(0).PhysicalNumberOfCells;

/// <summary>
///  获取Table有个别TD合并的列数和行数等音信。与Excel中对应Cell的合并行数和列数一致。
/// </summary>
/// <param name=”rowIndex”>行号</param>
/// <param name=”colIndex”>列号</param>
/// <param name=”colspan”>TD中须求统一的行数</param>
/// <param name=”rowspan”>TD中需求统一的列数</param>
/// <param name=”rowspan”>此单元格是还是不是被有个别行合并带有在内。假若被含有在内,将不出口TD。</param>
/// <returns></returns>
private void GetTdMergedInfo(int rowIndex, int colIndex, out int colspan, out int rowspan, out bool isByRowMerged)
{
    colspan = 1;
    rowspan = 1;
    isByRowMerged = false;
    int regionsCuont = sht.NumMergedRegions;
    Region region;
    for (int i = 0; i < regionsCuont; i++)
    {
        region = sht.GetMergedRegionAt(i);
        if (region.RowFrom == rowIndex && region.ColumnFrom == colIndex)
        {
            colspan = region.ColumnTo – region.ColumnFrom + 1;
            rowspan = region.RowTo – region.RowFrom + 1;

    int colSpan;
    int rowSpan;
    bool isByRowMerged;

            return;
        }
        else if (rowIndex > region.RowFrom && rowIndex <= region.RowTo && colIndex>=region.ColumnFrom && colIndex<=region.ColumnTo)
        {
            isByRowMerged = true;
        }
    }
}

    StringBuilder table = new StringBuilder(rowsCount * 32);

末尾在apsx页面中输出营造好的Table:

    table.Append(“<table border=’1px’>”);
    for (int rowIndex = 0; rowIndex < rowsCount; rowIndex++)
    {
        table.Append(“<tr>”);
        for (int colIndex = 0; colIndex < colsCount; colIndex++)
        {
            GetTdMergedInfo(rowIndex, colIndex, out colSpan, out rowSpan, out isByRowMerged);
            //假设已经被行合并包蕴进去了就不出口TD了。
            //注意被统一的行或列不出口的处理情势不平等,见上边一处的笺注表明了列合并后不出口TD的处理形式。
            if (isByRowMerged)
            {
                continue;
            }
            
            table.Append(“<td”);
            if (colSpan > 1)
                table.Append(string.Format(” colSpan={0}”, colSpan));
            if (rowSpan > 1)
                table.Append(string.Format(” rowSpan={0}”, rowSpan));
            table.Append(“>”);

<%=excelContent %>

            table.Append(sht.GetRow(rowIndex).GetCell(colIndex));

实践效果如下:

            //列被合并之后此行将少输出colSpan-一个TD。
            if (colSpan > 1)
                colIndex += colSpan – 1;

 

            table.Append(“</td>”);

我们发现,与Excel中的布局完全相同(那里没有处理单元格的体裁,只处理了内容,有趣味的读者也得以将Excel中单元格的体制也利用在HTML中)。那里为保证布局一致,首假如将Excel中的Region新闻分析成Table的colSpan和rowSpan属性,要是对那四个性子不太了解,能够组合以下代码和演示加以掌握:

        }
        table.Append(“</tr>”);
    }
    table.Append(“</table>”);

<table width=”300px” border=”1px”>
<tr>
    <td colspan=”2″ rowspan=”2″>0,0</td>
    <td>0,3</td>
</tr>
<tr>
    <td>1,3</td>
</tr>
<tr>
    <td rowspan=”2″>2,0</td>
    <td colspan=”2″>2,1</td>
</tr>
<tr>
    <td>3,1</td>
    <td>3,2</td>
</tr>
</table>

    this.excelContent = table.ToString();
}

 以上HTML代码对应的Table显示为:

  在那之中使用的GetTdMergedInfo方法代码如下:

 

/// <summary>
///  获取Table某些TD合并的列数和行数等新闻。与Excel中对应Cell的合并行数和列数一致。
/// </summary>
/// <param name=”rowIndex”>行号</param>
/// <param name=”colIndex”>列号</param>
/// <param name=”colspan”>TD中要求统一的行数</param>
/// <param name=”rowspan”>TD中需求统一的列数</param>
/// <param name=”rowspan”>此单元格是还是不是被某些行合并带有在内。假如被含有在内,将不出口TD。</param>
/// <returns></returns>
private void GetTdMergedInfo(int rowIndex, int colIndex, out int colspan, out int rowspan, out bool isByRowMerged)
{
    colspan = 1;
    rowspan = 1;
    isByRowMerged = false;
    int regionsCuont = sht.NumMergedRegions;
    Region region;
    for (int i = 0; i < regionsCuont; i++)
    {
        region = sht.GetMergedRegionAt(i);
        if (region.RowFrom == rowIndex && region.ColumnFrom == colIndex)
        {
            colspan = region.ColumnTo – region.ColumnFrom + 1;
            rowspan = region.RowTo – region.RowFrom + 1;

3.5用NPOI操作EXCEL--巧妙使用Excel
Chart

            return;
        }
        else if (rowIndex > region.RowFrom && rowIndex <= region.RowTo && colIndex>=region.ColumnFrom && colIndex<=region.ColumnTo)
        {
            isByRowMerged = true;
        }
    }
}

  在NPOI中,本人并不协理Chart等高级对象的创始,但透过l模板的艺术能够巧妙地使用Excel强大的透视和图表功效,请看以下例子。

末段在apsx页面中输出创设好的Table:

首先创建立模型板文件,定义两列以及针对性此区域的名号“sales”:

<%=excelContent %>

始建数据表,数据来源于填入刚才定义的区域:

履行效果如下:

终极生成的多寡透视表所在Sheet的样式如下:

 

现今,模板已经济建设好,另存为“D:\MyProject\NPOIDemo\Chart\Book2.xls”。我们发现,模板就相当于二个“空架子”,仅仅有操作办法没并不曾其余数据。下一步,大家往这么些“空架子”中填入数据。大家经过如下代码往那些“空架子”中写入数据:

大家发现,与Excel中的布局完全相同(那里没有拍卖单元格的体裁,只处理了剧情,有趣味的读者也得以将Excel中单元格的体制也利用在HTML中)。那里为保证布局一致,首假使将Excel中的Region新闻分析成Table的colSpan和rowSpan属性,假若对那七个性格不太明白,能够组合以下代码和演示加以通晓:

static void Main(string[] args)
{
    HSSFWorkbook wb = new HSSFWorkbook(new FileStream(@”D:\MyProject\NPOIDemo\Chart\Book2.xls”, FileMode.Open));

<table width=”300px” border=”1px”>
<tr>
    <td colspan=”2″ rowspan=”2″>0,0</td>
    <td>0,3</td>
</tr>
<tr>
    <td>1,3</td>
</tr>
<tr>
    <td rowspan=”2″>2,0</td>
    <td colspan=”2″>2,1</td>
</tr>
<tr>
    <td>3,1</td>
    <td>3,2</td>
</tr>
</table>

    HSSFSheet sheet1 = wb.GetSheet(“Sheet1”);

 以上HTML代码对应的Table突显为:

    HSSFRow row = sheet1.CreateRow(1);
    row.CreateCell(0).SetCellValue(“令狐冲”);
    row.CreateCell(1).SetCellValue(50000);

 

    row = sheet1.CreateRow(2);
    row.CreateCell(0).SetCellValue(“任盈盈”);
    row.CreateCell(1).SetCellValue(30000);

 

    row = sheet1.CreateRow(3);
    row.CreateCell(0).SetCellValue(“风清扬”);
    row.CreateCell(1).SetCellValue(80000);

3.5 用NPOI操作EXCEL--巧妙使用Excel
Chart

    row = sheet1.CreateRow(4);
    row.CreateCell(0).SetCellValue(“任我行”);
    row.CreateCell(1).SetCellValue(20000);

  在NPOI中,本人并不辅助Chart等高档对象的创建,但由此l模板的不二法门能够巧妙地使用Excel强大的透视和图纸效率,请看之下例子。

    //Write the stream data of workbook to the root directory
    FileStream file = new FileStream(@”test.xls”, FileMode.Create);
    wb.Write(file);
    file.Close();
}

率先制造模板文件,定义两列以及针对此区域的名目“sales”:

开拓生成的test.xls文件,发现数目现已被填进去了:

 

再看数据透视表,也有数据了:

创办数据表,数据来源填入刚才定义的区域:

 

 

总结:
Excel有着强大的表格透视和图片功效,而且简单易用,利用NPOI,能够对其开展丰硕利用。在做图形报表、透视报表时将那多少个有效!

末尾生成的数量透视表所在Sheet的体裁如下:

 

 

NPOI实践:
.NET导入Excel文件的另一种选拔

迄今截至,模板已经济建设好,另存为“D:\MyProject\NPOIDemo\Chart\Book2.xls”。我们发现,模板就相当于三个“空架子”,仅仅有操作方法没并没有别的数据。下一步,大家往那么些“空架子”中填入数据。大家经过如下代码往这几个“空架子”中写入数据:

作者:Tony Qu

static void Main(string[] args)
{
    HSSFWorkbook wb = new HSSFWorkbook(new FileStream(@”D:\MyProject\NPOIDemo\Chart\Book2.xls”, FileMode.Open));

官方网站:http://npoi.codeplex.com | NPOI
QQ交流群:  78142590

    HSSFSheet sheet1 = wb.GetSheet(“Sheet1”);

 

    HSSFRow row = sheet1.CreateRow(1);
    row.CreateCell(0).SetCellValue(“令狐冲”);
    row.CreateCell(1).SetCellValue(50000);

NPOI之所以强大,并不是因为它协理导出Excel,而是因为它帮助导入Excel,并能“掌握”OLE2文书档案结构,那也是别的部分Excel读写库相比较弱的方面。平日,读入并领悟结构远比导出来得复杂,因为导入你必须假使任何意况都以唯恐的,而生成你即便保障知足你协调必要就可以了,假设把导入须要和生成须求比做三个汇聚,那么生成供给平日都以导入须要的子集,这一法则不仅反映在Excel读写库中,也映现在pdf读写库中,近年来市面上超过贰分一的pdf库仅支持生成,不帮衬导入。

    row = sheet1.CreateRow(2);
    row.CreateCell(0).SetCellValue(“任盈盈”);
    row.CreateCell(1).SetCellValue(30000);

只要您不信任NPOI能够很好的了解OLE2文书档案格式,那就去下载POIFS
Brower
。具体能够参照那篇小说的牵线:Office文件格式解惑。当然单单精晓OLE2是不够的,因为Excel文件格式是BIFF,但BIFF是以OLE2为根基的,做个很形象的比喻正是:OLE2也正是磁盘的FAT格式,BIFF相当于文件和文件夹。NPOI负责通晓BIFF格式的代码基本都在HSSF命名空间里面。

    row = sheet1.CreateRow(3);
    row.CreateCell(0).SetCellValue(“风清扬”);
    row.CreateCell(1).SetCellValue(80000);

好了,刚才废话了一阵子,主借使给大家打打基础,以往跻身正题。

    row = sheet1.CreateRow(4);
    row.CreateCell(0).SetCellValue(“任我行”);
    row.CreateCell(1).SetCellValue(20000);

 

    //Write the stream data of workbook to the root directory
    FileStream file = new FileStream(@”test.xls”, FileMode.Create);
    wb.Write(file);
    file.Close();
}

本文将以DataTable为容器读入某xls的率先个工作表的多少(近年来群里面很多个人问那几个难题)。

打开生成的test.xls文件,发现数目现已被填进去了:

在始发在此以前,大家先来补些基础知识。每三个xls都对应三个唯一的HSSFWorkbook,每3个HSSFWorkbook会有多少个HSSFSheet,而每3个HSSFSheet包蕴若干HSSFRow(Excel
二〇〇一中不可跨越65535行),每1个HSSFRow又带有若干个HSSFCell(Excel
二零零三中不可跨越256列)。

 

为了遍历全数的单元格,大家就得获得某2个HSSFSheet的有着HSSFRow,日常能够用HSSFSheet.GetRowEnumerator()。假诺要收获某一特定行,能够直接用HSSFSheet.GetRow(rowIndex)。其它要遍历大家就无法不精通边界,有一些性质大家是能够用的,比如HSSFSheet.FirstRowNum(工作表中第多个有数据行的行号)、HSSFSheet.LastRowNum(工作表中最终2个有数据行的行号)、HSSFRow.FirstCellNum(一行中首先个有数量列的列号)、HSSFRow.LastCellNum(一行中最终八个有多少列的列号)。

再看数量透视表,也有多少了:

基础知识基本上补得大致了,今后动工!

 

 

 

首先咱们要预备八个用以打开文件流的函数InitializeWorkbook,由于文件读完后就没用了,所以那里直接用using(养成好习惯,呵呵)。

总结:
  Excel有着兵多将广的报表透视和图片作用,而且简单易用,利用NPOI,能够对其进展充裕利用。在做图形报表、透视报表时将特别实惠!

HSSFWorkbookhssfworkbook;

 

void InitializeWorkbook(string path)
{
    //read the template via FileStream, it is suggested to use
FileAccess.Readto prevent file lock.

NPOI实践:
.NET导入Excel文件的另一种采用

    //book1.xlsis an Excel-2007-generated file, so some new unknown BIFF
records are added.

作者:Tony Qu

    using (FileStream file =new FileStream(path,
FileMode.Open,FileAccess.Read))
    {
        hssfworkbook = newHSSFWorkbook(file);
    }
}

官方网站:http://npoi.codeplex.com | NPOI
QQ交流群:  78142590

接下去大家要起来写最重庆大学的函数ConvertToDataTable,即把HSSF的数码放到1个DataTable中。

 

 

NPOI之所以强大,并不是因为它帮忙导出Excel,而是因为它帮忙导入Excel,并能“驾驭”OLE2文书档案结构,那也是别的一些Excel读写库相比弱的地点。经常,读入并掌握结构远比导出来得复杂,因为导入你没办法不假设任何景况都以只怕的,而生成你只要有限协助满足你本人需求就能够了,就算把导入要求和生成要求比做八个聚众,那么生成必要常常都是导入须要的子集,这一法则不仅反映在Excel读写库中,也浮将来pdf读写库中,近年来市面上海南大学学部分的pdf库仅支持生成,不帮忙导入。

HSSFSheetsheet = hssfworkbook.GetSheetAt(0);
System.Collections.IEnumerator rows = sheet.GetRowEnumerator();

假使你不依赖NPOI能够很好的理解OLE2文书档案格式,那就去下载POIFS
Brower
。具体能够参考那篇小说的牵线:Office文件格式解惑。当然单单掌握OLE2是不够的,因为Excel文件格式是BIFF,但BIFF是以OLE2为根基的,做个很形象的比喻正是:OLE2相当于磁盘的FAT格式,BIFF约等于文件和文件夹。NPOI负责驾驭BIFF格式的代码基本都在HSSF命名空间里面。

while(rows.MoveNext())
{
    HSSFRow row = (HSSFRow)rows.Current;
    //TODO::Create DataTable row

好了,刚才废话了片刻,首就算给大家打打基础,今后进来正题。

 

 

    for (int i = 0; i < row.LastCellNum; i++)
    {
        HSSFCell cell = row.GetCell(i);
        //TODO::set cell value to the cell of DataTables

本文将以DataTable为容器读入某xls的第三个工作表的多少(方今群里面很五个人问这一个题目)。

    }

在上马从前,我们先来补些基础知识。每2个xls都对应2个唯一的HSSFWorkbook,各种HSSFWorkbook会有好多个HSSFSheet,而每二个HSSFSheet蕴涵若干HSSFRow(Excel
二〇〇四中不得跨越65535行),每一个HSSFRow又富含若干个HSSFCell(Excel
二零零零中不得超过256列)。

下面的构造大家都应当能看懂吧,无非正是先遍历行,再遍历行中的每一列。这里引出了3个难题,由于Excel的单元格有少数种档次,类型不相同显示的事物就不一样,具体的品类有布尔型、数值型、文本型、公式型、空白、错误。

为了遍历全数的单元格,我们就得获得某四个HSSFSheet的具有HSSFRow,经常能够用HSSFSheet.GetRowEnumerator()。假设要赢得某一特定行,能够向来用HSSFSheet.GetRow(rowIndex)。此外要遍历大家就必须清楚边界,有部分质量我们是足以用的,比如HSSFSheet.FirstRowNum(工作表中第一个有数据行的行号)、HSSFSheet.LastRowNum(工作表中最后二个有数据行的行号)、HSSFRow.FirstCellNum(一行中首先个有多少列的列号)、HSSFRow.LastCellNum(一行中最后1个有数据列的列号)。

publicenum HSSFCellType
{
    Unknown = -1,
    NUMERIC = 0,
    STRING = 1,
    FORMULA = 2,
    BLANK = 3,
    BOOLEAN = 4,
    ERROR = 5,
}

基础知识基本上补得大致了,以后动工!

 

 

此地的HSSFCellType描述了独具的品种,但仔细的恋人或然已经意识了,那里没有日期型,那是怎么吧?那是因为Excel底层并从未早晚日期型,而是经过数值型来代表,至于什么区分日期和数字,都以由文本展现的体制决定的,在NPOI中则是由HSSFDataFormat来拍卖。为了可以方便的取得所急需的门类所对应的公文,我们能够运用HSSFCell.ToString()来拍卖。

第贰大家要积谷防饥1个用于打开文件流的函数InitializeWorkbook,由于文件读完后就没用了,所以那里直接用using(养成好习惯,呵呵)。

于是刚才的代码则变成了如此:

HSSFWorkbook hssfworkbook;

HSSFSheetsheet = hssfworkbook.GetSheetAt(0);
System.Collections.IEnumerator rows = sheet.GetRowEnumerator();

void InitializeWorkbook(string path)
{
    //read the template via FileStream, it is suggested to use
FileAccess.Read to prevent file lock.

DataTable dt = new DataTable();
for (int j = 0; j < 5;j++)
{
    dt.Columns.Add(Convert.ToChar(((int)’A’)+j).ToString());
}

    //book1.xls is an Excel-2007-generated file, so some new unknown
BIFF records are added.

while(rows.MoveNext())
{
    HSSFRow row = (HSSFRow)rows.Current;
    DataRow dr = dt.NewRow();

    using (FileStream file = new FileStream(path, FileMode.Open,
FileAccess.Read))
    {
        hssfworkbook = new HSSFWorkbook(file);
    }
}

    for (int i = 0; i < row.LastCellNum; i++)
    {
        HSSFCell cell = row.GetCell(i);

接下去我们要起来写最关键的函数ConvertToDataTable,即把HSSF的数量放到三个DataTable中。

        if (cell == null)
        {
            dr[i] = null;
        }
        else

 

        {

HSSFSheet sheet = hssfworkbook.GetSheetAt(0);
System.Collections.IEnumerator rows = sheet.GetRowEnumerator();

            dr[i] = cell.ToString();

while (rows.MoveNext())
{
    HSSFRow row = (HSSFRow)rows.Current;
    //TODO::Create DataTable row

        }

 

    }

    for (int i = 0; i < row.LastCellNum; i++)
    {
        HSSFCell cell = row.GetCell(i);
        //TODO::set cell value to the cell of DataTables

    dt.Rows.Add(dr);

    }

}

上边的结构大家都应该能看懂吧,无非正是先遍历行,再遍历行中的每一列。那里引出了多少个难关,由于Excel的单元格有有些种档次,类型分化展现的事物就不一致,具体的花色有
布尔型、数值型、文本型、公式型、空白、错误。

是或不是相当粗略,呵呵!

public enum HSSFCellType
{
    Unknown = -1,
    NUMERIC = 0,
    STRING = 1,
    FORMULA = 2,
    BLANK = 3,
    BOOLEAN = 4,
    ERROR = 5,
}

自然,假使您要对某些特定的单元格类型做尤其处理,可以由此判HSSFCell.CellType来缓解,比如上边包车型地铁代码:

 

        switch(cell.CellType)
        {
            case HSSFCellType.BLANK:
                dr[i] = “[null]”;
                break;
            case HSSFCellType.BOOLEAN:
                dr[i] =cell.BooleanCellValue;
                break;
            case HSSFCellType.NUMERIC:
                dr[i] =cell.ToString();    //This is a trick to get
the correct value of the cell.NumericCellValue will return a numeric
value no matter the cell value is a dateor a number.

此地的HSSFCellType描述了有着的品种,但细心的对象大概早就发现了,那里没有日期型,那是怎么吧?那是因为Excel底层并没有必然日期型,而是经过数值型来代表,至于什么区分日期和数字,都以由文本呈现的体制决定的,在NPOI中则是由HSSFDataFormat来拍卖。为了能够有利于的得到所急需的门类所对应的文本,大家可以利用HSSFCell.ToString()来处理。

               break;
            case HSSFCellType.STRING:
                dr[i] =cell.StringCellValue;
                break;
            case HSSFCellType.ERROR:
                dr[i] = cell.ErrorCellValue;
                break;
            case HSSFCellType.FORMULA:
            default:
                dr[i] = “=”+cell.CellFormula;
                break;
        }

于是乎刚才的代码则改为了那样:

此间只是举个简易的例子。

HSSFSheet sheet = hssfworkbook.GetSheetAt(0);
System.Collections.IEnumerator rows = sheet.GetRowEnumerator();

 

DataTable dt = new DataTable();
for (int j = 0; j < 5; j++)
{
    dt.Columns.Add(Convert.ToChar(((int)’A’)+j).ToString());
}

完整代码下载:http://files.cnblogs.com/tonyqus/ImportXlsToDataTable.zip

while (rows.MoveNext())
{
    HSSFRow row = (HSSFRow)rows.Current;
    DataRow dr = dt.NewRow();

专注,此代码中不包罗NPOI的assembly,不然文件会十分的大,所以提议去npoi.codeplex.com下载。

    for (int i = 0; i < row.LastCellNum; i++)
    {
        HSSFCell cell = row.GetCell(i);

 

        if (cell == null)
        {
            dr[i] = null;
        }
        else

        {

            dr[i] = cell.ToString();

        }

    }

    dt.Rows.Add(dr);

}

是否很简短,呵呵!

本来,倘若你要对某些特定的单元格类型做特殊处理,能够通过判HSSFCell.CellType来化解,比如下面包车型地铁代码:

        switch(cell.CellType)
        {
            case HSSFCellType.BLANK:
                dr[i] = “[null]”;
                break;
            case HSSFCellType.BOOLEAN:
                dr[i] = cell.BooleanCellValue;
                break;
            case HSSFCellType.NUMERIC:
                dr[i] = cell.ToString();    //This is a trick to get
the correct value of the cell. NumericCellValue will return a numeric
value no matter the cell value is a date or a number.

                break;
            case HSSFCellType.STRING:
                dr[i] = cell.StringCellValue;
                break;
            case HSSFCellType.ERROR:
                dr[i] = cell.ErrorCellValue;
                break;
            case HSSFCellType.FORMULA:
            default:
                dr[i] = “=”+cell.CellFormula;
                break;
        }

那边只是举个简易的例证。

 

总体代码下载:http://files.cnblogs.com/tonyqus/ImportXlsToDataTable.zip

留意,此代码中不包罗NPOI的assembly,不然文件会十分大,所以提出去npoi.codeplex.com下载。

 

相关文章