freemarker导出excel

导出excel有多种方式,我用的是freemarker和jxl导出excel,各有各的优缺点。

本篇讲的是用freemarker导出excel

众所周知freemarker是采用模板导出的方法,通用性比较高,但是由于它是用xml模板生成的,打开时会提示文件格式不正确,选择确认打开时没有问题的就是老会提示,这个我一直没有解决 ,有大神知道的,希望可以向菜鸟我指点迷津,废话不多说;

1:导出freemarker库需要的jar包

freemarker-2.3.19.jar。 外部引入jar包,或者添加mevan依赖都可以

2:设计自己想要的excle保存为xml的格式、

3:用实际数据替代虚拟的数据

这里需要注意:

第一个是动态行数设置,要大于等于实际行数

ss:ExpandedRowCount="${rowCount}"

这里的rowCount值我用的是list.size()+100保存为ftl文件。

4:模板装载 数据传入 模板导出

这里的documentHandlerUtil是自定义的文件处理类

Configuration 类’

Configuration 是一个存放模版(Template)可使用的全局共享变量的一个对象。同时它还负责模版(Template)实例的创建以及缓存。

Configuration 实际上是freemarker.template.Configuration 对象的实例,使用其构造函数创建。通常应用使用一个共享的单实例Configuration 对象。

Configuration 对象可被Template 对象的方法使用,每一个模版实例都关联与一个Configuration 实例,它是通过Template 的构造函数被关联进去的,通常是你使用这个方法来Configuration.getTemplate 获得模版对象的。

OutputStream流向客户端浏览器输出数据,并可指定编码方式

outputStream=response.getOutputStream():得到输出数据的字节流

outputStreamWrite=new OutPutStreamWrite(outputStream,“UTF-8”) :将输出字节流编码成字符流

BufferedWriter是字符缓冲输出流,继承于Writer,作用是为其他字符输出流添加一些缓冲功能。

最后t.process(data,out)  导出excle

close()  // 关闭此流,但要先刷新它。

 flush()  // 刷新该流的缓冲。

freemarker详细导出过程就是这样

补充:当表头不固定时:

不固定列时:第一步和平常一样新建excel保存为xml

不同:列数要进行动态设值:

列名:动态设值(如上图)

根据列对应设置数据(如上图)

注意freemarker判空:

用“!” 判空但是不能判断多级空 比如crew.strengthList[key]若用!

key 或者strengthList为空时,会报错。

这里要加上括号()

 

猜你喜欢

转载自blog.csdn.net/zhoumimi_comeon123/article/details/82314276
今日推荐