jfinal框架提供了对于freemarker模板引擎的支持,freemarker引擎支持后台数据向前台的映射,所在项目中页面展现使用的正是该框架。最近有需求,将数据导出为excel文件。搜集网上利用freemarker生成excel的教程,结合文件下载相关知识,实现了根据模板动态生成excel报表,并调用浏览器自带下载器进行下载的功能。
1. excel下创建如下模板,${}中为遍历数据List得到的单个记录对应的各个字段,由于jfinal中的数据表已通过addMapping映射到数据库,此处字段名为数据库中对应字段名。其中getNum(item.aID)为Model中根据表id获取数量的函数,本文所用的方法同样支持Model中函数结果的显示:
2. 另存为XML电子表格:
3. 用notepad++等文本编辑器打开新创建的XML文件,修改XML文件如下标示位置,其中ExpandRowCount为数据行数+表头行数(固定值)。修改后保存,另存为ftl格式文件:
4. 添加通用模板解析类(参考文末链接):
package util;
/**
* 模板解析实体类
*/
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.util.Map;
import freemarker.cache.StringTemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;
public class TemplateParseUtil {
/**
* 解析模板生成Excel