前言
导出excel是比较常见的需求,有时候需要导出的excel有固定的格式,这里记录一下FreeMarker导出excel,暂时不了解FreeMarker基本语法的请先去学习一下。
正文
FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。(百度百科)
FreeMarker导出的步骤大概就三步:制作模板–>取数据–>渲染导出excel。
它能导出的不限于excel,上面说了FreeMarker是一个模板引擎,能够生成各类文件,大概如下:
制作模板
制作模板,以excel为例,先将有格式的excel另存为xml格式的文件
实际中需求的格式可能比较复杂,但是没有关系,因为制作模板不会对其样式进行操作,只涉及修改数据填充的部分,所以样式不管再复杂,都是一样的。
将excel另存为xml,这里我选择的是 “XML 电子表格2003” ,因为有些电脑上的安装的wps或Excel版本比较低,所以尽量选择兼容性高的xml格式。
导出的xml文件仔细看,就能将其和原文件联系起来,对应为sheet1的3行3列数据。
最后我需要导出的文件是这样的:
修改xml文件如下:
设置了rowcount(表格的行数),修改了表格内容标签,遍历list进行渲染。
最后修改文件后缀为.ftl,制作模板大功告成。
取数据
取数据这一步就根据模板定义的变量进行渲染就好了,这一步就不多介绍了,我模拟了一些数据
private Map<String, Object> getDataMap() {
Map map = new HashMap(16);
//list demo
List<Map<String,String>> dataList = new LinkedList();
for (int i = 0; i<10; i++){
Map eleMap = new HashMap(16);
eleMap.put("name","姓名"+i+1);
eleMap.put("education","本科");
eleMap.put("age",i+20);
dataList.add(eleMap);
}
map.put("datalist", dataList);
// 表格总共有多少行
map.put("rowcount", dataList.