使用xml模板导出excel

下面这种表格如何使用xml导出呢?

xml代码

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<tables>
    <styles>
        <style id="h1" font.fontheightinpoints="14" font.fontname="黑体" alignment="center"
               border="1" vertical="center"/>
        <style id="h2" font.fontheightinpoints="14" font.fontname="黑体" alignment="center"
               border="1" vertical="center"/>
        <style id="header_cell_center_bold" font.fontheightinpoints="12" font.fontname="黑体" alignment="center"
               border="1" vertical="center"/>
        <style id="header_cell_center_bold_h2" font.fontheightinpoints="12" font.fontname="黑体" alignment="left"
               border="1" vertical="center"/>
        <style id="content_cell_center" font.fontheightinpoints="10" font.fontname="宋体" alignment="center" border="1"
               wrapText="true" vertical="center"/>
        <style id="content_cell_left" font.fontheightinpoints="12" font.fontname="黑体" alignment="left" border="1"
               wrapText="true" vertical="center"/>
    </styles>
    <table name="总体情况">
    #if($dataMap['jibqk']!=$null && $dataMap['jibqk'].rows.size()>0)
        <tr>
            <td styleId="content_cell_left"  colspan="6">基本情况</td>
        </tr>
        <tr>
        #foreach($row in $dataMap['jibqk'].rows)
            <td styleId="content_cell_center"  width="14">$row.cells.name</td>
            <td styleId="content_cell_center"  width="6">$row.cells.data_c</td>
        #set($remainder = $foreach.count%3)
        #if($remainder==0)
        </tr>
        <tr>
<!--$remainder..2 作用:因为总共六列,集合数据中,第一列和第二列一定会有值,所以remainder的值为0(循环2次),1(循环1次),2(循环0次) 每循环一次会增加两列,最多增加4列-->        #elseif($foreach.count==$dataMap['jibqk'].rows.size())
            #foreach($i in [$remainder..2])
            <td styleId="content_cell_center"  width="14"></td>
            <td styleId="content_cell_center"  width="6"></td>
            #end
        #end
        #end
        </tr>
    #end

    #if($dataMap['tongzds']!=$null && $dataMap['tongzds'].rows.size()>0)
    <tr>
        <td styleId="content_cell_left"  colspan="6">通知单</td>
    </tr>
    <tr>
        #foreach($row in $dataMap['tongzds'].rows)
        <td styleId="content_cell_center"  width="14">$row.cells.tzd_doctype_name</td>
        <td styleId="content_cell_center"  width="6">$row.cells.prj_c</td>
        #set($remainder = $foreach.count%3)
        #if($remainder==0)
    </tr>
    <tr>
        #elseif($foreach.count==$dataMap['tongzds'].rows.size())
        #foreach($i in [$remainder..2])
        <td styleId="content_cell_center"  width="14"></td>
        <td styleId="content_cell_center"  width="6"></td>
        #end
        #end
        #end
    </tr>
    #end

    #if($dataMap['fankfs']!=$null && $dataMap['fankfs'].rows.size()>0)
        <tr>
            <td styleId="content_cell_left"  colspan="6">反馈方式</td>
        </tr>
        <tr>
        #foreach($row in $dataMap['fankfs'].rows)
            <td styleId="content_cell_center"  width="14">$row.cells.feedback_type_name</td>
            <td styleId="content_cell_center"  width="6">$row.cells.prj_c</td>
            #set($remainder = $foreach.count%3)
            #if($remainder==0)
            </tr>
            <tr>
            #elseif($foreach.count==$dataMap['fankfs'].rows.size())
                #foreach($i in [$remainder..2])
                <td styleId="content_cell_center"  width="14"></td>
                <td styleId="content_cell_center"  width="6"></td>
                #end
            #end
        #end
        </tr>
    #end
    </table>
</tables>

后端返回的数据结构

json 复制代码
{
	"jibqk": {
		"rows": [
			{
				"cells": {
					"name": "总量",
					"params": {},
					"data_c": 304
				},
				"subDs": null,
				"joined": false,
				"closCount": 1,
				"cellSize": 3
			},
			{
				"cells": {
					"name": "办理中",
					"params": {
						"handleStatus": "10"
					},
					"data_c": 291
				},
				"subDs": null,
				"joined": false,
				"closCount": 1,
				"cellSize": 3
			},
			{
				"cells": {
					"name": "已办结",
					"params": {
						"handleStatus": "30"
					},
					"data_c": 12
				},
				"subDs": null,
				"joined": false,
				"closCount": 1,
				"cellSize": 3
			},
			{
				"cells": {
					"name": "未到期",
					"params": {
						"emptyFinishLimitDate": "contain",
						"handleStatus": "10",
						"finishLimitDateBegin": "2025-04-10"
					},
					"data_c": 246
				},
				"subDs": null,
				"joined": false,
				"closCount": 1,
				"cellSize": 3
			},
			{
				"cells": {
					"name": "超期未办结",
					"params": {
						"finishLimitDateEnd": "2025-04-09",
						"handleStatus": "10"
					},
					"data_c": 45
				},
				"subDs": null,
				"joined": false,
				"closCount": 1,
				"cellSize": 3
			},
			{
				"cells": {
					"name": "按时办结",
					"params": {
						"handleStatus": "30",
						"prjOverDue": false
					},
					"data_c": 10
				},
				"subDs": null,
				"joined": false,
				"closCount": 1,
				"cellSize": 3
			},
			{
				"cells": {
					"name": "超期办结",
					"params": {
						"handleStatus": "30",
						"prjOverDue": true
					},
					"data_c": 2
				},
				"subDs": null,
				"joined": false,
				"closCount": 1,
				"cellSize": 3
			}
		],
		"columns": [
			"name",
			"params",
			"data_c"
		]
	},
	"fankfs": {
		"rows": [
			{
				"cells": {
					"prj_c": 56,
					"feedback_type_name": "督查专报",
					"feedback_type_id": "12a71a3e2ea24b75a76152654f94101c",
					"params": {
						"feedbackTypeId": "12a71a3e2ea24b75a76152654f94101c"
					}
				},
				"subDs": null,
				"joined": false,
				"closCount": 1,
				"cellSize": 4
			}
		],
		"columns": [
			"prj_c",
			"feedback_type_name",
			"feedback_type_id",
			"params"
		]
	},
	"tongzds": {
		"rows": [
			{
				"cells": {
					"prj_c": 154,
					"tzd_doctype_id": "912f2c748c284c369e008b9ea3a4da95",
					"tzd_doctype_name": "督查通知单",
					"params": {
						"tzdDoctypeId": "912f2c748c284c369e008b9ea3a4da95"
					}
				},
				"subDs": null,
				"joined": false,
				"closCount": 1,
				"cellSize": 4
			}
		],
		"columns": [
			"prj_c",
			"tzd_doctype_id",
			"tzd_doctype_name",
			"params"
		]
	}
}
相关推荐
木子欢儿11 分钟前
Docker Hub 镜像发布指南
java·spring cloud·docker·容器·eureka
Devin~Y21 分钟前
高并发电商与AI智能客服场景下的Java面试实战:从Spring Boot到RAG与向量数据库落地
java·spring boot·redis·elasticsearch·spring cloud·kafka·rag
蜡台26 分钟前
IDEA 一些 使用配置和插件
java·ide·intellij-idea
磊 子1 小时前
redis详解2
java·spring boot·redis
白露与泡影1 小时前
Java面试题库及答案解析(2026版)
java·开发语言·面试
程序员阿明1 小时前
spring boot3 集成jjwt(java-jwt)版本的
java·spring boot·python
bbq粉刷匠1 小时前
Java--剖析synchronized
java·开发语言
ayt0071 小时前
Netty AbstractNioChannel源码深度剖析:NIO Channel的抽象实现
java·数据库·网络协议·安全·nio
Gofarlic_OMS1 小时前
装备制造企业Fluent许可证成本分点典型案例
java·大数据·开发语言·人工智能·自动化·制造
码王吴彦祖1 小时前
顶象 AC 纯算法迁移实战:从补环境到纯算的完整拆解
java·前端·算法