报表导出Word与Excel的实现
admin 发布于:2017-03-26 22:45:16
阅读:loading
也算是做过不少报表导出了,最多的导出类型为Word与Excel两种。下面容我来分析一下这些导出的实现方式。
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文件;
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实现。
点赞