首先这个idea和做法是来自于这位大哥的 http://blog.csdn.net/u010722643/article/details/41732607 我在公司的开发上运用了这一套,然后+上了自己的一些内容,所以希望大家如果要学习或了解原理的话,还是看看这位大哥的原文,蛮不错的一篇文章,以下内容主要从实操为主。
要实现freemarker的模板导出,是需要把excel文件转化成模板文件,一种freemarker可以识别的格式.ftl:
1、选一个比较纯净的excel文件,最好是把对应的excel条数给删掉,然后保存excel成microsoft自带的xml格式
2、然后相对应的,把.xml的后缀改为.ftl格式的,直接修改文件名就可以了!
3、最后就是要修改对应的内容,把无关的标签删掉以及增加动态的freemarker标签,实现动态生成excel表格的功能:
对于一个.ftl文件来说,需要的是设置对应的动态生成的标签。
像这里就是酱紫,必须动态的设置对应的自增,这里用到了JSTL的语法,对应的对象用$符号包裹,意思是循环并获得对象。
4、这边用了list来递归循环数据。
我这里用了两个workSheet来展示数据,也是这个freemarker给予我们优势的地方,把两个表格二合一到一个excel里面,做法其实就是再创建一个workSheet来就行了。
我后续会加上对应的下载模板的一个链接,只要格式对了,就能简单的导出excel了!
5、最后就是上代码了!
要注意的就是 这个out是Spring mvc里面的httpResponse.getWriter()方法获得的!
总结:诚然,用这种方式生成的excel是方便,但是总的来说,兼容性不太好,实际上这个生成的是一套xml文件,在wps和microsoft excel下打开是正常的,但是每次都会提示格式不正确(microsoft excel),但是又可以打开,而在移动端的表现也是差强人意,android可以打开,然而在IOS的情况下就打开不了,或者打开就被识别成了xml格式。
像这种情况,我还是觉得用POI去实现导出会是更好的选择,导出生成真正的excel才是最佳的选择。