近期为完成一个简单的报表模块,需求很简单,从数据库中取出数据导出到已写好的Excel模版中。
一开始准备用jfreeReport实现,偶然调试spring的demo时发现,countries的例子很好,既有web分页,又有excel,pdf的输出,经分析例子,spring封装了poi实现excel导出,itext实现pdf输出。
1,先来分析一下poi的一些背景。POI的主页:
http://jakarta.apache.org/poi
。POI HSSF是当今市面上最强大的处理EXCEL表格的java工具,比韩国人写的那个JExcelApi或其它几种工具都要好。而且它是Apache的开源项目。当然POI HSSF也有缺点:不能直接支持EXCEL图表,API文档粗糙简略,有些类和方法需要引用Apache项目中的其它一些包,包与包之间依赖关系比较复杂等等。
Apache的Jakata项目的POI子项目,目标是处理ole2对象。目前比较成熟的是HSSF接口,处理MS Excel(97-2002)对象。它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西,而是真正的Excel对象,你可以控制一些属性如sheet,cell等等。这是一个年轻的项目,所以象HDF这样直接支持Word对象的好东西仍然在设计中。其它支持word格式的纯java方案还有itext,不过也是仍在奋斗中。但是HSSF已经成熟到能够和足够我们使用了。另外,无锡永中Office的实现方案也是纯java的解决方案,不过那也是完全商业的产品,并不是公开代码项目。其实,从开发历史的角度讲,在80年代中期starOffice的原作者在德国成立了StarOffice suite公司,然后到1999年夏天starOffice被sun收购,再到2000年6月starOffice5.2的发布;并且从starOffice6.0开始,starOffice建立在OpenOffice的api的基础上,这个公开代码的office项目已经进行了很长的时间。虽然那是由C++写的,但是POI的代码部分也是由openOffice改过来的。所以,应该对POI充满足够的信心。国内已经有部分公司在他们的办公自动化等Web项目中使用poi了,如日恒的ioffice,海泰的HTOffice等。java当初把核心处理设成Unicode,带来的好处是另代码适应了多语言环境。然而由于老外的英语只有26个字母,有些情况下,一些程序员用8位的byte处理,一不小心就去掉了CJK的高位。或者是由于习惯在程序中采用硬编码,还有多种原因,使得许多java应用在CJK的处理上很烦恼。还好在POI HSSF中考虑到这个问题,可以设置encoding为双字节。编译好的jar主要有这样4个:poi包,poi Browser包,poi hdf包,poi hssf例程包。实际运行时,需要有poi包就可以了。如果用Jakarta ant编译和运行,下载apache Jakarta POI的release中的src包,它里面已经为你生成好了build文件了。只要运行ant就可以了(ant 的安装和使用在此不说了)。如果是用Jbuilder 运行,请在新建的项目中加入poi包。以Jbuilder6为例,选择Tools菜单项的config libraries...选项,新建一个lib。在弹出的菜单中选择poi包,如这个jakarta-poi-1.5.1-final-20020820.jar,把poi添加到jbuilder中。然后,右键点击你的项目,在project的properties菜单中path的required Libraries中,点add,添加刚才加入到jbuilder中的poi到你现在的项目中。如果你仅仅是为了熟悉POI hssf的使用,可以直接看POI的samples包中的源代码,并且运行它。hssf的各种对象都有例程的介绍。hssf提供的例程在org.apache.poi.hssf.usermodel.examples包中,共有14个,生成的目标xls都是workbook.xls。如果你想看更多的例程,可以参考hssf的Junit test cases,在poi的包的源代码中有。hssf都有测试代码。
2 ,poi提供了一个不错的tutor,教初学者如何快速上手使用POI HSSF:http
://jakarta.apache.org/poi/hssf/quick-
guide.html
建一个poiDemo的工程,然后把tutor首页的例子运行一遍,入门级别就够了。其中包括:新建excel文件(WorkBook);新建sheet;开辟cell;设置cell数据类型和格式;设置输出的样式如对齐方式,颜色,字体,边框等;合并单元格;读取已有excel文件;设置打印区域;设置页码和页脚;调用公式;选中sheet;屏幕缩放;绘图;插入图像等等。
3, spring的对poi的封装。在spring-framework-1.2-rc2\src\org\springframework\web\servlet\view\document下有两个类AbstractExcelView.java和AbstractPdfView.java,其中前者是处理excel的抽象类,继承它的时候,需要实现抽象方法<!--StartFragment -->buildExcelDocument,实例代码如下:
1
protected
void
buildExcelDocument(
2
Map model, HSSFWorkbook workbook,
3
HttpServletRequest request, HttpServletResponse response)
{
4
5
//
Go to the first sheet.
6
//
getSheetAt: only if workbook is created from an existing document
7
//
HSSFSheet sheet = workbook.getSheetAt(0);
8
HSSFSheet sheet
=
workbook.createSheet(
"
Spring
"
);
9
sheet.setDefaultColumnWidth(
12
);
10
11
//
Write a text at A1.
12
HSSFCell cell
=
getCell(sheet,
0
,
0
);
13
setText(cell,
"
Spring POI test
"
);
14
15
//
Write the current date at A2.
16
HSSFCellStyle dateStyle
=
workbook.createCellStyle();
17
dateStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat(
"
m/d/yy
"
));
18
cell
=
getCell(sheet,
1
,
0
);
19
cell.setCellValue(
new
Date());
20
cell.setCellStyle(dateStyle);
21
22
//
Write a number at A3
23
getCell(sheet,
2
,
0
).setCellValue(
458
);
24
25
//
Write a range of numbers.
26
HSSFRow sheetRow
=
sheet.createRow(
3
);
27
for
(
short
i
=
0
; i
<
10
; i
++
)
{
28
sheetRow.createCell(i).setCellValue(i
*
10
);
29
}
30
}
4, 通过web程序调用,很多情况需要把生成的excel文件通过网络连接来输出,这些spring已经替你做好了,所以只要按照spring的调用标准就可以,我使用的是spring的mvc,实例代码如下:
1
protected
ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)
throws
Exception
{
2
List list
=
(List) request.getSession().getAttribute(
"
list
"
);
//
从session中取数据list
3
Map model
=
new
HashMap();
4
model.put(
"
list
"
,list);
//
将list封装传到excelView中
5
ExcelView ev
=
this
.getExcelView();
//
ExcelView继承了AbatractExcelView
6
return
new
ModelAndView(ev,model);
//
跳转页面
7
}
ok,整个简单的过程就完成了,你可以根据自己的需求灵活的在各个环节coding!漂亮的报表会让你兴奋不已!
分享到:
相关推荐
Spring+Mybatis+Druid+POI示例整合demo
主要是springboot+myBatis+poi+mysql的使用,从数据库查询到结果集导出excel到本地,从本地中的excel文件导入到数据库中。
springboot+mybatis+poi 实现excel导入导出操作
SpringBoot +Mybatis +POI导入、导出Excel文件 简单清晰几个类,处理SpringBoot 导入导出excel doc目录下 是mysql数据库脚本 和 导入的模板
Spring MVC+Spring+Mybatis+poi+xml全部jar包,适合新手
springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式...
Spring3 MVC + POI 实现 Excel与MySQL 的导入导出
spring + springMVC + mybatis + maven + apache-poi 框架整合源码,带详细注释。
POI读写excel文件+poi简单文档; POI读写excel文件+poi简单文档。
通过工具类中读取绝对路径下的excel文档。 将文档放入到List集合。 将List集合转换成List集合。 生成随机数。 最后将结果放入到swing页面中进行效果显示。 模拟10个同学玩lol随机分组。 同学名字在excel中动态配置。
吉利吉利网站 spring + springMVC + Mybatis + Springboot + thymeleaf + c3p0 + generator + poi-ooxml + com.alibaba
NULL 博文链接:https://weigang-gao.iteye.com/blog/2103017
SpringBootMybatis+poi+Thymeleaf实现excel文件数据导入到数据库以及从数据库将数据导出成excel
Freemarker+poi 模板生成word+导入图片 直接导入eclipse即可,希望对大家有所帮助
java+poi+excel读取写入等操作所有jar(最新支持excel2013)+poi-bin-3.10-beta2-20130904源代码学习
spring boot+mybatis plus+easy poi实现数据库导出成excel和excel导入到数据库
springboot + poi导出指定格式Excel模板。 springboot+poi导出指定格式Excel模板,完整项目,导出即用。 poi导出Excel