NPOI使用手册

Posted 寂寞夏天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NPOI使用手册相关的知识,希望对你有一定的参考价值。

【转】NPOI使用手册

NPOI使用手册

目录

1.认识NPOI

 

2. 使用NPOI生成xls文件

2.1 创建基本内容

2.1.1创建WorkbookSheet

2.1.2创建DocumentSummaryInformationSummaryInformation

2.1.3创建单元格

2.1.5创建批注

2.1.6创建页眉和页脚

 

2.2 单元格操作

2.2.1设置格式

2.2.2合并单元格

2.2.3对齐相关设置

2.2.4使用边框

2.2.5字体设置

2.2.6背景和纹理

2.2.7设置宽度和高度

 

2.3 使用Excel公式

2.3.1基本计算

2.3.2 SUM函数

2.3.3日期函数

2.3.4字符串相关函数

2.3.5 IF函数

2.3.6 CountIfSumIf函数

2.3.7 Lookup函数

2.3.8随机数函数

2.3.9通过NPOI获得公式的返回值

 

2.4 创建图形

2.4.1画线

2.4.2画矩形

2.4.3画圆形

2.4.4Grid

2.4.5插入图片

 

2.5打印相关设置

 
2.6
高级功能

2.6.1调整表单显示比例

2.6.2设置密码

2.6.3组合行、列

2.6.4锁定列

2.6.5显示/隐藏网格线

2.6.6设置初始视图的行、列

2.6.7数据有效性

2.6.8生成下拉式菜单

 

3. 项目实践

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

3.2生成九九乘法表

3.3生成一张工资单

3.4xls文件中抽取文本

3.5巧妙使用ExcelChart

3.6导入Excel文件

 

NPOI 1.2教程 - 1 认识NPOI

本章将介绍NPOI的一些基本信息,包括以下几个部分

·        什么是NPOI

·        版权说明

·        相关资源

·        团队介绍

·        未来展望

·        Assembly的作用

 

1.1 什么是NPOI

NPOI,顾名思义,就是POI.NET版本。那POI又是什么呢?POI是一套用Java写成的库,能够帮助开发者在没有安装微软Office的情况下读写Office 97-2003的文件,支持的文件格式包括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也是采用这个许可证),这意味着它可以被用于任何商业或非商业项目,你不用担心因为使用它而必须开放你自己的源代码,所以它对于很多从事业务系统开发的公司来说绝对是很不错的选择。

当然作为一个开源许可证,肯定也是有一些义务的,例如如果你在系统中使用NPOI,你必须保留NPOI中的所有声明信息。对于源代码的任何修改,必须做出明确的标识。

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

 

1.3 相关资源

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

POIFS Browser 1.2

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

QQ交流群:  78142590

 

1.4 团队介绍

Tony Qu来自于中国上海,是这个项目的发起人和开发人员,时区是GMT+820089月开始了NPOI的开发,负责NPOI所有底层库的开发、测试和bug修复。

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

 

HüseyinTüfekçilerli来自于土耳其的伊斯坦布尔,也是这个项目的开发人员,时区是GMT+2200811月参与了NPOI的开发,主要负责POIFS Browser 1.0的开发工作。

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

 

aTao.Xiang,来自中国,20098月开始参与该项目,主要参与了NPOI 1.2中文版的撰写工作和推广工作

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

 

1.5 回顾与展望

目前POI版本中的HWPF(用于Word的读写库)还不是很稳定,并非正式发布版本,且负责HWPF的关键开发人员已经离开,所以NPOI可能考虑自己重新开发HWPF。另外,目前微软正在开发Open XML Format SDKNPOI可能会放弃对ooxml的支持,当然这取决于用户的需求和Open XML Format SDK的稳定性和速度。从目前而言,NPOI有几大优势

第一,完全基于.NET 2.0,而非.NET 3.0/3.5

第二,读写速度快(有个国外的兄弟回复说,他原来用ExcelPackage生成用了4-5个小时,现在只需要4-5分钟)

第三,稳定性好(相对于用Office OIA而言,毕竟那东西是基于Automation做的,在Server上跑个Automation的东西,想想都觉得可怕),跑过了将近1000个测试用例(来自于POItestcase目录)

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

第五,完美支持Excel 2003格式(据说myxls无法正确读取xls模板,但NPOI可以),以后也许是所有Office 2003格式

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

 

1.6 NPOI 1.2中各Assembly的作用

NPOI目前有好几个assembly,每个的作用各有不同,开发人员可以按需加载相应的assembly。在这里大概罗列一下:

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

 

NPOI 1.2教程 - 2.1.1 创建WorkbookSheet

作者:Tony Qu

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

  

创建Workbook说白了就是创建一个Excel文件,当然在NPOI中更准确的表示是在内存中创建一个Workbook对象流。

本节作为第2章的开篇章节,将做较为详细的讲解,以帮助NPOI的学习者更好的理解NPOI的组成和使用。

NPOI.HSSF是专门负责Excel BIFF格式的命名空间,供开发者使用的对象主要位于NPOI.HSSF.UserModelNPOI.HSSF.Util命名空间下,下面我们要讲到的Workbook的创建用的就是NPOI.HSSF.UserModel.HSSFWorkbook类,这个类负责创建.xls文档。

在开始创建Workbook之前,我们先要在项目中引用一些必要的NPOI assembly,如下所示:

NPOI.dll

NPOI.POIFS.dll

NPOI.HSSF.dll

NPOI.Util.dll

 

要创建一个新的xls文件其实很简单,只要我们初始化一个新的HSSFWorkbook实例就行了,如下所示:

using NPOI.HSSF.UserModel;

...

HSSFWorkbookhssfworkbook =newHSSFWorkbook();

是不是很方便啊,没有任何参数或设置,但这么创建有一些限制,这样创建出来的WorkbookExcel中打开是会报错的,因为Excel规定一个Workbook必须至少带1Sheet,这也是为什么在Excel界面中,新建一个Workbook默认都会新建3Sheet。所以必须加入下面的创建Sheet的代码才能保证生成的文件正常:

HSSFSheetsheet = hssfworkbook.CreateSheet("newsheet");

如果要创建标准的Excel文件,即拥有3Sheet,可以用下面的代码:

hssfworkbook.CreateSheet("Sheet1");

hssfworkbook.CreateSheet("Sheet2");

hssfworkbook.CreateSheet("Sheet3");

最后就是把这个HSSFWorkbook实例写入文件了,代码也很简单,如下所示:

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

hssfworkbook.Write(file);

file.Close();

 

这里假设文件名是test.xls,,在创建完FileStream之后,直接调用HSSFWorkbook类的Write方法就可以了。

最后你可以打开test.xls文件确认一下,是不是有3个空的Sheet

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

 

NPOI 1.2教程 - 2.1.2 创建DocumentSummaryInformationSummaryInformation

作者:Tony Qu

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

昨天收到了不少回复,有msn上的,也有blog上的,我代表NPOI Team向所有支持和关注NPOI的兄弟表示感谢,让我们共同完善NPOI

 

前一节中我们讲解了如何创建一个新的Workbook,但在此过程中大家也许会发现一个细节,这些文件没有包括DocummentSummaryInformationSummaryInformation头。如果你还不是很清楚我在说什么,可以看POIFS Browser打开test.xls文件后的截图:

 

你会发现只有Workbook目录,其他什么都没有,但事实上一个正常的xls文件,比如说Excel生成的xls文件是类似下面的结构:

 

是不是多出来DocumentSummaryInformationSummaryInformation两个头?很多人可能对DocumentSummaryInformationSummaryInformation很陌生,可能第一次听说这玩意,没事,这很正常,因为普通用户很少会去使用这些东西,但它们其实比想象中有用。

 

请看上图中的信息,如作者、标题、标记、备注、主题等信息,其实这些信息都是存储在DocummentSummaryInformationSummaryInformation里面的,这么一说我想大家应该明白了吧,这些信息是为了快速提取文件信息准备。在Windows XP中,也有对应的查看和修改界面,只是没有Vista这么方便,如下所示:

 

这恐怕也是很多人对于这些信息漠不关心的原因吧,因为没有人愿意通过右击文件->属性这样复杂的操作去查看一些摘要信息。

 

提示

DocummentSummaryInformationSummaryInformation并不是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.HPSF;

using NPOI.POIFS.FileSystem;

其中与DocummentSummaryInformationSummaryInformation密切相关的是HPSF命名空间。

首先创建Workbook

HSSFWorkbookhssfworkbook =newHSSFWorkbook();

然后创建DocumentSummaryInformation

DocumentSummaryInformationdsi = PropertySetFactory.CreateDocumentSummaryInformation();

dsi.Company ="NPOI Team";

再创建SummaryInformation

SummaryInformationsi = PropertySetFactory.CreateSummaryInformation();

si.Subject ="NPOI SDK Example";

因为是范例,这里仅各设置了一个属性,其他都没有设置。

现在我们把创建好的对象赋给Workbook,这样才能保证这些信息被写入文件。

hssfworkbook.DocumentSummaryInformation= dsi;

hssfworkbook.SummaryInformation= si;

最后和2.1.1节一样,我们把Workbook通过FileStream写入文件。

 

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

 

NPOI 1.2教程 - 2.1.3 创建单元格

作者:Tony Qu

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

 

用过Excel的人都知道,单元格是Excel最有意义的东西,我们做任何操作恐怕都要和单元格打交道。在Excel中我们要添加一个单元格只需要点击任何一个单元格,然后输入内容就是了,但是Excel底层其实没有这么简单,不同的单元格是有不同的类型的,比如说数值单元格是用NumberRecord表示,文本单元格是用LabelSSTRecord表示,空单元格是用BlankRecord表示。这也就意味着,在设置单元格时,你必须告诉NPOI你需要创建哪种类型的单元格。

要创建单元格首先要创建单元格所在的行,比如,下面的代码创建了第0行:

HSSFSheetsheet1 = hssfworkbook.CreateSheet("Sheet1");

HSSFRowrow1=sheet1.CreateRow(0);

行建好了,就可以建单元格了,比如创建A1位置的单元格:

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

这里要说明一下,SetCellValue有好几种重载,你可以设置单元格为booldoubleDateTimestringHSSFRichTextString类型。其中对于string类型的重载调用的就是HSSFRichTextString类型的重载,所以是一样的,HSSFRichTextString可用于有字体或者Unicode的文本。

如果你觉得每一行要声明一个HSSFRow很麻烦,可以用下面的方式:

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

这么用有个前提,那就是第0行还没创建过,否则得这么用:

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

 

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

 

如果你要获得某一个已经创建的单元格对象,可以用下面的代码:

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

 

本节仅讲解最基本的单元格创建,有关单元格格式设置、样式等高级话题请见:2.2节单元格相关操作。

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

 

NPOI 1.2教程 - 2.1.4 创建批注

作者:Tony Qu

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

 

很多人不怎么用Excel中的批注,所以我特地截了张图,让大家知道本节我们要创建的到底是什么东西。

 

在过去,我们恐怕没有办法实现这一功能,因为无论是cvs法、html法、oledb法都没有提供这样的接口,当然Office PIA法可以做到,但是性能实在太差,而且稳定性不好,经常莫名其妙crash(这是某某兄弟给我的反馈,我引用了下,呵呵)。在以后的教程中,

以上是关于NPOI使用手册的主要内容,如果未能解决你的问题,请参考以下文章

NPOI使用手册

NPOI使用手册

OpenCV中文手册如何使用

hbs使用手册

谁有FreeBSD的使用手册啊?

Apache Druid的SQL查询使用手册