好久没时间写帖子了,由于工作需要,写一个基于JAVA实现的Excel多表头动态导出功能,首先可能这个叫法比较啰嗦,大家多担待下,下面我们先看看什么是Excel多表头动态导出(效果图):
它包含两部分:1、是表头,就像大家看到的表头是由多行合并的(多表头);2.内容部分,就是下方的数据数据内容。
当然两个内容都是由后台人员,分别由两个接口返回的(也可以一个,但一个会显得格式冗余),一是因为数据是由后天提供,因此他的表头数据是不固定的,所以我们就不能写死,因为表头可能有甲方、乙方、丙方要求等;二是随机看后台数据的,所以我们就不能事先画好Excel模板进行导出,好以上就是我对java实现Excel多表头动态导出的说明。
一、在开发前我们要捋一下思路,该怎么去做?会遇到什么坑?首先不用多说,肯定是这个多表头的问题了,因为后端返回的Json数据一般都为:
不难发现一个list<Map>发现虽然都有一、二级目录的区分,但是是分开的不符合我们的需要,因此我们需要转换分组为想要的数据类型
Map<String, List<Map>>格式的数据:既把同一个一级目录下的二级目录放到一个List<Map>中方便后面的Excel渲染
二、就是在Excel做数据渲染时的数据角标的计算问题,以及如何让经过我们分组后的表头数据与内容匹配上,因为数据是动态生成的,所以在生成数据是一定要注意,后几列的数据再前几列数据生成的基础上向后推的。
三、主要的坑应该就是上面两个问题了,那我们开发撸代码吧:
1、我使用的实现语言是JAVA中的servlet,关于servlet不太熟悉的小伙伴可以百度自行科普一下,简单说就是(1):
集成HttpServlet并实现其几个方法;(2)配置web.xlm文件等。
代码:
/** * 自定义表头导出方法 * @throws: l * @param :resultParam 导出excel名称、模板名称、导出地址 */ public void exportExcelByDiyTitle(HttpServletRequest request, HttpServletResponse respo