报表导出Word与Excel的实现


placeholder image
admin 发布于:2017-03-26 22:45:16
阅读:loading

也算是做过不少报表导出了,最多的导出类型为Word与Excel两种。下面容我来分析一下这些导出的实现方式。


一、导出Word的实现

1、使用 freemarker模板实现

此种实现是最普遍的,预先按照最终的需要调整好一个doc格式的文件,填上相关数据后,将此doc格式的文件转换为Word格式的xml文件,再编辑xml文件,将需要替换的位置写上一些变量、循环判断逻辑等,在后台使用freemarker实现为其填充数据,并将此文件的后缀格式保存为doc类型。

优点:

1)实现简单、易于维护,推荐使用;

2)可借助于freemarker技术对相关字段进行格式化、逻辑处理等;

3)导出效果可与实际操作Word效果一致;

缺点:

1)导出的格式为doc类型(docx的格式简单试了一下不行,没有继续深入);

2)如果后期导出的样式需要调整将会很痛苦,相当于模板需要重新维护一次;

2、使用拼html标签代码方式

此种实现采用后台拼接html标签格式的字符串,需要了解doc格式对于html类型文档内容的输出结果,后台程序拼接html结构的内容,最后将内容写入文件,并修改后缀为doc格式。

优点:

1)实现简单,熟悉html即可;

2)适合“轻量级”的导出;

缺点:

1)样式控制麻烦,代码维护性较差;

3、使用写入xml标签的方式

此种实现的最终结果是一个Word格式的xml文件(内容为xml格式的,打开方式为Word),它只能算是一个变通的方式,只需要将数据以xml结构的数据写入文件即可,闭着眼睛一直写,类似于写入文件时的一直追加。

优点:

1)可以导出海量的数据,适合大数据量时的变通实现方案;

缺点:

1)毕竟不是一个真正的Word文件;


二、导出Excel实现

1、使用POI在内存中创建工作簿的方式

POI是一个开源的处理文档的组件,特别是对Excel的处理能够满足各种各样的需求,使用它我们可以再内存中创建Wrokbook、Sheet、Row、Cell等,支出样式填充、公式计算等等。

优点:

1)支持xls与xlsx格式;

2)强大的实现满足各种需求;

3)支持特大数据量的导出(SXSSFWorkbook的flushRows);

4)持续维护更新;

缺点:

1)非要说一点的话就是使用它写出来的代码必定看着很乱;

2、使用Jxls模板实现

此种实现是对于POI的一个封装,也就是在强大的处理Excel基础上使用模板来作为最终要导出的效果,后端程序只需要传递数据即可,无需关注文件的具体展现方式;

优点:

1)支持xls与xlsx格式;

2)模板文件控制导出结果,能够作用于复杂报表的制作,支持Excel公式;

3)模板采用自定义标签,可循环、判断进行相关处理,代码只需关注取数,不关注具体展现;

4)处理完毕后的文件可以是Workbook,可用POI原生的API进行二次处理;

缺点:

1)适合大多数情况的导出,对于不考虑数据量特别大强烈推荐,如果数据量巨大推荐采用原生POI的SXSSFWorkbook的方式;

3、使用写入xml标签的方式写入 

此种实现与Word采用xml方式类似,同样能够支持海量数据的导出,但导出结果实际为xls类型,打开方式为Excel,同Word方式的xml实现。



 点赞


 发表评论

当前回复:作者

 评论列表


留言区