使用Apache开源POI和jXLS两种API生成报表.docx
- 文档编号:17671224
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:12
- 大小:398.07KB
使用Apache开源POI和jXLS两种API生成报表.docx
《使用Apache开源POI和jXLS两种API生成报表.docx》由会员分享,可在线阅读,更多相关《使用Apache开源POI和jXLS两种API生成报表.docx(12页珍藏版)》请在冰点文库上搜索。
使用Apache开源POI和jXLS两种API生成报表
使用Apache开源POI和jXLS两种API生成报表
编写人:
杜航航
编写时间:
2011/1/28
目录
1引言3
2使用POI对Excel进行读写4
2.1POI读取excel文件的内容4
2.2使用POI对Excel进行写操作6
2.3创建Sheet6
2.4创建Cell7
2.5设置Cell的格式7
3使用jXLS生成Excel报表8
3.1使用excel模板生成报表8
3.2根据模板生成图表9
3.3根据数据库数据生成报表11
1引言
在电信领域,生成报表是日常工作中必不可少的一项任务。
提供报表的方式也是多种多样,例如使用BO来生成报表,使用eclipse的插件来做报表。
但是有些时候,需要我们自已来开发报表。
这就是要借助于报表操作的API来完成。
可以通过API直接将数据读写如报表文件,也可以根据模板来生成报表。
根据这个需要,我研究了一下操作报表的两种API,一种Apache的开源项目POI,POI是针对微软OFFICE文档的一种JAVAAPI,使用该API可以实现对微软的OFFICE文档的各种操作。
其中使用最广泛的是对MSword,excel,PPT的操作。
不仅仅支持windows2003的office文档还支持windows2007的office文档。
例如:
HSSFisthePOIProject'spureJavaimplementationoftheExcel'97(-2007)fileformat.XSSFisthePOIProject'spureJavaimplementationoftheExcel2007OOXML(.xlsx)fileformat.
HSSFandXSSFprovideswaystoreadspreadsheetscreate,modify,readandwriteXLSspreadsheets.Theyprovide:
lowlevelstructuresforthosewithspecialneeds
aneventmodelapiforefficientread-onlyaccess
afullusermodelapiforcreating,readingandmodifyingXLSfiles
再随后的例子中,我也将以操作Excel作为例子,使用HSSF操作Excel'97(-2007)。
POI这个开源项目的特点是直接对Excel的每个sheet或者是每个Row,或者是每个Cell操作。
API的优点是简单易懂,容易上手。
对于复杂表格的操作比较繁琐,并且不方便生成各种饼状图和柱状图等等。
另外一个API是jXLS。
jXLS是一个专门针对excel的API,并不支持word或者是PPT。
它是在POI的基础上进一步的包装,是一个更加优秀的开源项目。
当前最新的版本是jXLS1.0。
jXLS1.0新增的特性是对excel2007的支持。
jXLS最大的特点用一句话概况就是:
jXLSisasmallandeasy-to-useJavalibraryforwritingExcelfilesusingXLStemplatesandreadingdatafromExcelintoJavaobjectsusingXMLconfiguration.。
ExcelgenerationisrequiredinmanyJavaapplicationsthathavesomekindofreportingfunctionality.ThemostcompletelibrarytomanipulateXLSfilesfromJavaisApachePOIlibrary.TheproblemsappearwhenitisrequiredtocreatealotofcustomandcomplexExcelreportswithrichformattingandenhancedfunctionality.
jXLS的特性包括:
UsingSQLqueriesdirectlyinXLStemplates
Simplepropertyaccessnotation
Fullexpressionlanguagesupport
Complexobjectgraphexport
Flexiblecollectionexport
Flow-ControlTagssupport
Dynamicgroupingofdata
Exportofasinglecollectionintomultipleworksheets
Adjacenttablessupport!
Complexformulassupport
Charts,MacrosandmanyotherExcelfeaturesinXLStemplate
DynamicOutlines
DynamicColumnsHiding
DynamicCellStyleprocessingthroughcustomProcessors
JDBCResultSetexport
MergedCellssupport
Multiplebeanpropertiesinasinglecell
ReadingXLSfiles
使用POI可以去Apache的网站下载最新的POI版本,网址是:
http:
//poi.apache.org
使用jXLS可以去sourceforge的网站下载最新版本,网址是:
2使用POI对Excel进行读写
2.1POI读取excel文件的内容
POI对excel文件的读取很方便,很简单,可以大致按照以下几步:
第一步:
加载Excel文件
第二步:
指定要读取的sheet
第三步:
指定要读取的Row
第四步:
获得要读取的Cell
具体代码如下:
从代码中可以看到
从33-35行是根据要读取的excel文件生产一个HSSFSheet的对象,这样以后通过对HSSFSheet的读取,就实现了对excel文件本事的读取。
36行是读取指定的Sheer,wb.getSheetAt(0),表示的是读取的是第一个sheet,也就是说sheet的编号是从0开始,也可以通过sheet名称获取该Sheet,例如,wb.getSheet(“Sheet1”),就实现了对Sheet1的读取。
37行是获取Row,也就是获取某行的数据,可以通过sheet.getRow(rownumber)来获取。
读取任一行的数据。
33-44行的代码是遍历了第一行的所有数据。
46-47行的代码是获取第一行的第一个表格的内容,可以通过row.getCell()来获取某个表格的内容。
以上就是读取Excel中表格内容的代码,很简单明了吧!
2.2使用POI对Excel进行写操作
以下是对Excel进行写操作的代码:
代码的61-66行和读操作是一样是,即获得要写的表格
68行是设置单元格的数据类型,这里有设置的是字符串类型,其他的类型请参考POI的API。
69行是设置单元格的内容
71行是设置单元格为数字类型。
72行是为单元格赋值。
74-76行是将需要写入的内容加载到excel中。
以上就是对单元格的写操作。
2.3创建Sheet
以上的操作都是保证单元格存在的情况下,如果Sheet不存在,首先要创建一个Sheet,然后才能操作。
以下代码是创建一个Sheet的代码:
80行是创建一个HSSFWorkbook
82,83分别创建两个sheet,sheet的Name是newsheet和secondsheet。
84-87行是将根据创建的java对象生成excel文件。
2.4创建Cell
2.3是创建一个sheet,创建一个sheet之后,就需要创建Cell,以下是创建Cell的代码。
以上代码就是创建一个Cell的代码。
94-97行是创建一个Cell。
98-104行是创建Cell并且赋值。
2.5设置Cell的格式
众所周之,Excel表格可以设置表格的各种格式以及字体等等,这些都是可以通过POI的API来实现。
以下代码就是设置单元格格式和字体的样例代码。
113行是创建一个Cell的样式。
114-125行是设置Cell样式的具体内容,例如可以设置表格的时间的格式,设置表格边框的样式,设置背景颜色等等。
126行是将Cell使用设置的样式。
设置字体的代码如下:
以上是设置字体的代码。
其中可以设置字体大小,字体的类型等等。
设置好字体之后将cell的样式设置为设置好的字体,再将样式赋给Cell,这样该Cell的字体就是设置好的字体。
3使用jXLS生成Excel报表
3.1使用excel模板生成报表
jXLS的最大特点就是可以利用模板生成报表,当然POI也可以实现,但是对于报表格式比较的情况来说,POI需要书写大量的代码。
而jXLS是对POI的包装,在支持报表方面有很强的优势,可以节省大量的代码。
下面具体说明。
首先需要设计一个报表的模板,这里举例如下:
这个报表列出一个公司所有的部门,列出部门名称,部门主管的信息,以及部门下所有员工的信息,包括员工姓名,年龄,工资,等等;并自动计算出部门的工资总额等。
因此需要两个Bean,一个是员工信息的Bean,该java类是Employee,一个是部门信息的Bean,该java类是Department。
该两个java见附件。
根据该模板生成报表的代码如下:
66行是excel模板的文件地址。
67行是要生成的报表的Excel文件地址。
68行是初始化部门信息的方法。
具体内容见附件。
70-71行是将部门信息封装到一个Map表中。
72-73行是将部门信息封装写入到模板中,生成报表文件。
生成的报表如下:
3.2根据模板生成图表
使用jXLS还有一个优点就是可以生成图表类型的报表,例如生成柱状图或者是饼状图。
下面是一个Excel的模板:
生成报表的代码如下:
19-20行分别是模板的文件地址和生成的报表的文件地址。
22-29行是初始化一个员工信息的列表的代码。
30-31行是将员工信息列表封装到一个Map中。
32-34行是根据员工信息生成报表的代码。
生成的报表如下图所示:
3.3根据数据库数据生成报表
jXLS还有一个很好的特点是可以直接将数据库的数据生成excel报表。
上图是excel模板。
该报表模板是显示员工信息。
上图是数据库中员工的数据信息。
根据数据库数据生成报表的代码如下:
以上代码是生成报表的代码。
53-54行是模板和输出报表的文件路径。
55行是连接数据库,具体代码省略。
56行是初始化数据库状态。
57行是数据库查询语句。
59-60行是查询结果。
61-62行是将查询结果存放到Map中。
63-64行是将查询结果的数据生成到报表中。
生成的报表如下:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 Apache 开源 POI jXLS API 生成 报表
![提示](https://static.bingdoc.com/images/bang_tan.gif)