EasyExcel JSON数据多级表头导出
最近在学习使用easyExcel,刚好看到有人问了个问题
代码解决如下
package com.wwj.test.web.uitl;import com.alibaba.excel.EasyExcel;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;import java.util.ArrayList;
import java.util.List;/*** @author: wuwenjun* @since 2022-06-07*/
public class ReadJson {public static void main(String[] args) {String data = getDataString();JSONObject jsonObject = JSONObject.parseObject(data);//读取JSONObject jsonObject1 = jsonObject.getJSONObject("data");JSONArray jsonArray = jsonObject1.getJSONArray("headerNodes");List<JsonData> list = jsonArray.toJavaList(JsonData.class);String fileName = "C:\\Users\\win10\\Desktop\\write" + System.currentTimeMillis() + ".xlsx";// 这里 需要指定写用哪个class去读,然后写到第一个sheet,名字为模板 然后文件流会自动关闭// 如果这里想使用03 则 传入excelType参数即可EasyExcel.write(fileName).head(head(list)).sheet("模板").doWrite(data());}private static List<List<String>> head(List<JsonData> data) {List<List<String>> result = new ArrayList<>();List<String> temp = new ArrayList<>();// 深度优先搜索 使用递归for (JsonData jsonData : data) {dfs(result, jsonData, temp);}return result;}private static void dfs(List<List<String>> result, JsonData jsonData, List<String> temp) {List<JsonData> datas = jsonData.getChildren();temp.add(jsonData.getName());if (CollectionUtils.isEmpty(datas)) {//看似浅复制,其实是深复制List<String> head = new ArrayList<>(temp);result.add(head);} else {for (JsonData data : datas) {dfs(result, data, temp);}}// 移除最后一个temp.remove(temp.size() - 1);}private static List<List<String>> data() {return new ArrayList<>();}static class JsonData {private String code;private List<JsonData> children;private String parentCode;private String name;public void setCode(String code) {this.code = code;}public void setChildren(List<JsonData> children) {this.children = children;}public void setParentCode(String parentCode) {this.parentCode = parentCode;}public void setName(String name) {this.name = name;}public String getCode() {return code;}public List<JsonData> getChildren() {return children;}public String getParentCode() {return parentCode;}public String getName() {return name;}}private static String getDataString() {return "{\n" +" \"code\":200,\n" +" \"data\":{\n" +" \"headerNodes\":[\n" +" {\n" +" \"children\":[\n" +" {\n" +" \"code\":\"salesRegionName\",\n" +" \"name\":\"大区\",\n" +" \"parentCode\":\"-1\"\n" +" },\n" +" {\n" +" \"code\":\"cityName\",\n" +" \"name\":\"城市\",\n" +" \"parentCode\":\"-1\"\n" +" },\n" +" {\n" +" \"code\":\"salesModelDesc\",\n" +" \"name\":\"门店模式\",\n" +" \"parentCode\":\"-1\"\n" +" },\n" +" {\n" +" \"code\":\"terminalNo\",\n" +" \"name\":\"门店编码\",\n" +" \"parentCode\":\"-1\"\n" +" },\n" +" {\n" +" \"code\":\"terminalName\",\n" +" \"name\":\"门店名称\",\n" +" \"parentCode\":\"-1\"\n" +" }\n" +" ],\n" +" \"code\":\"-1\",\n" +" \"name\":\"终端信息\"\n" +" },\n" +" {\n" +" \"children\":[\n" +" {\n" +" \"children\":[\n" +" {\n" +" \"code\":\"LSE0001\",\n" +" \"name\":\"前台零售额\",\n" +" \"parentCode\":\"JY\"\n" +" },\n" +" {\n" +" \"code\":\"SRA0001\",\n" +" \"name\":\"销售收入(含税)\",\n" +" \"parentCode\":\"JY\"\n" +" },\n" +" {\n" +" \"code\":\"TAX0001\",\n" +" \"name\":\"不含税扣点\",\n" +" \"parentCode\":\"JY\"\n" +" },\n" +" {\n" +" \"code\":\"SRB0001\",\n" +" \"name\":\"销售收入\",\n" +" \"parentCode\":\"JY\"\n" +" },\n" +" {\n" +" \"code\":\"FLE0001\",\n" +" \"name\":\"返利\",\n" +" \"parentCode\":\"JY\"\n" +" },\n" +" {\n" +" \"code\":\"JSR0001\",\n" +" \"name\":\"净收入\",\n" +" \"parentCode\":\"JY\"\n" +" },\n" +" {\n" +" \"code\":\"CBE0001\",\n" +" \"name\":\"成本\",\n" +" \"parentCode\":\"JY\"\n" +" },\n" +" {\n" +" \"code\":\"MLL0001\",\n" +" \"name\":\"毛利额\",\n" +" \"parentCode\":\"JY\"\n" +" },\n" +" {\n" +" \"code\":\"LRA0001\",\n" +" \"name\":\"利润\",\n" +" \"parentCode\":\"JY\"\n" +" },\n" +" {\n" +" \"code\":\"LRC0001\",\n" +" \"name\":\"直接利润\",\n" +" \"parentCode\":\"JY\"\n" +" },\n" +" {\n" +" \"code\":\"LRB0001\",\n" +" \"name\":\"净利润\",\n" +" \"parentCode\":\"JY\"\n" +" }\n" +" ],\n" +" \"code\":\"JY\",\n" +" \"name\":\"经营收入\",\n" +" \"parentCode\":\"STORE\"\n" +" },\n" +" {\n" +" \"children\":[\n" +" {\n" +" \"code\":\"RYF0001\",\n" +" \"name\":\"固定薪资\",\n" +" \"parentCode\":\"RYF\"\n" +" },\n" +" {\n" +" \"code\":\"RYF0002\",\n" +" \"name\":\"绩效工资\",\n" +" \"parentCode\":\"RYF\"\n" +" },\n" +" {\n" +" \"code\":\"RYF0003\",\n" +" \"name\":\"星级补贴\",\n" +" \"parentCode\":\"RYF\"\n" +" },\n" +" {\n" +" \"code\":\"RYF0004\",\n" +" \"name\":\"社保\",\n" +" \"parentCode\":\"RYF\"\n" +" },\n" +" {\n" +" \"code\":\"RYF0005\",\n" +" \"name\":\"公积金\",\n" +" \"parentCode\":\"RYF\"\n" +" },\n" +" {\n" +" \"code\":\"RYF0006\",\n" +" \"name\":\"其他\",\n" +" \"parentCode\":\"RYF\"\n" +" },\n" +" {\n" +" \"code\":\"RYF0007\",\n" +" \"name\":\"导购员常规提成\",\n" +" \"parentCode\":\"RYF\"\n" +" },\n" +" {\n" +" \"code\":\"RYF0000\",\n" +" \"name\":\"促销人员费合计\",\n" +" \"parentCode\":\"RYF\"\n" +" }\n" +" ],\n" +" \"code\":\"RYF\",\n" +" \"name\":\"促销人员\",\n" +" \"parentCode\":\"STORE\"\n" +" },\n" +" {\n" +" \"children\":[\n" +" {\n" +" \"code\":\"JCF0001\",\n" +" \"name\":\"进场费\",\n" +" \"parentCode\":\"JCF\"\n" +" },\n" +" {\n" +" \"code\":\"JCF0000\",\n" +" \"name\":\"进场费合计\",\n" +" \"parentCode\":\"JCF\"\n" +" }\n" +" ],\n" +" \"code\":\"JCF\",\n" +" \"name\":\"进场费用\",\n" +" \"parentCode\":\"STORE\"\n" +" },\n" +" {\n" +" \"children\":[\n" +" {\n" +" \"code\":\"ZXF0001\",\n" +" \"name\":\"装修费\",\n" +" \"parentCode\":\"ZXF\"\n" +" },\n" +" {\n" +" \"code\":\"ZXF0000\",\n" +" \"name\":\"装修费合计\",\n" +" \"parentCode\":\"ZXF\"\n" +" }\n" +" ],\n" +" \"code\":\"ZXF\",\n" +" \"name\":\"装修费用\",\n" +" \"parentCode\":\"STORE\"\n" +" },\n" +" {\n" +" \"children\":[\n" +" {\n" +" \"code\":\"YJF0001\",\n" +" \"name\":\"样机费\",\n" +" \"parentCode\":\"YJF\"\n" +" },\n" +" {\n" +" \"code\":\"YJF0000\",\n" +" \"name\":\"样机费用合计\",\n" +" \"parentCode\":\"YJF\"\n" +" }\n" +" ],\n" +" \"code\":\"YJF\",\n" +" \"name\":\"样机费用\",\n" +" \"parentCode\":\"STORE\"\n" +" },\n" +" {\n" +" \"children\":[\n" +" {\n" +" \"code\":\"RYF0008\",\n" +" \"name\":\"销售奖励\",\n" +" \"parentCode\":\"SJL\"\n" +" },\n" +" {\n" +" \"code\":\"SJL0000\",\n" +" \"name\":\"销售奖励合计\",\n" +" \"parentCode\":\"SJL\"\n" +" }\n" +" ],\n" +" \"code\":\"SJL\",\n" +" \"name\":\"销售奖励\",\n" +" \"parentCode\":\"STORE\"\n" +" },\n" +" {\n" +" \"children\":[\n" +" {\n" +" \"code\":\"CXF0001\",\n" +" \"name\":\"赠品费\",\n" +" \"parentCode\":\"CXF\"\n" +" },\n" +" {\n" +" \"code\":\"CXF0002\",\n" +" \"name\":\"广告费\",\n" +" \"parentCode\":\"CXF\"\n" +" },\n" +" {\n" +" \"code\":\"CXF0003\",\n" +" \"name\":\"物料费\",\n" +" \"parentCode\":\"CXF\"\n" +" },\n" +" {\n" +" \"code\":\"CXF0004\",\n" +" \"name\":\"导购激励费\",\n" +" \"parentCode\":\"CXF\"\n" +" },\n" +" {\n" +" \"code\":\"CXF0005\",\n" +" \"name\":\"渠道促销费\",\n" +" \"parentCode\":\"CXF\"\n" +" },\n" +" {\n" +" \"code\":\"CXF0006\",\n" +" \"name\":\"门店促销费\",\n" +" \"parentCode\":\"CXF\"\n" +" },\n" +" {\n" +" \"code\":\"CXF0007\",\n" +" \"name\":\"其他杂费\",\n" +" \"parentCode\":\"CXF\"\n" +" },\n" +" {\n" +" \"code\":\"CXF0000\",\n" +" \"name\":\"促销费合计\",\n" +" \"parentCode\":\"CXF\"\n" +" }\n" +" ],\n" +" \"code\":\"CXF\",\n" +" \"name\":\"促销费\",\n" +" \"parentCode\":\"STORE\"\n" +" },\n" +" {\n" +" \"children\":[\n" +" {\n" +" \"code\":\"FTF0001\",\n" +" \"name\":\"大区运营费用\",\n" +" \"parentCode\":\"FTA\"\n" +" },\n" +" {\n" +" \"code\":\"FTF0002\",\n" +" \"name\":\"线下总部职能费用\",\n" +" \"parentCode\":\"FTA\"\n" +" },\n" +" {\n" +" \"code\":\"FTF0003\",\n" +" \"name\":\"直接费用分摊\",\n" +" \"parentCode\":\"FTA\"\n" +" },\n" +" {\n" +" \"code\":\"FTF0000\",\n" +" \"name\":\"分摊费用合计\",\n" +" \"parentCode\":\"FTA\"\n" +" }\n" +" ],\n" +" \"code\":\"FTA\",\n" +" \"name\":\"直接分摊\",\n" +" \"parentCode\":\"STORE\"\n" +" },\n" +" {\n" +" \"children\":[\n" +" {\n" +" \"code\":\"FTF0004\",\n" +" \"name\":\"间接费用分摊\",\n" +" \"parentCode\":\"FTB\"\n" +" }\n" +" ],\n" +" \"code\":\"FTB\",\n" +" \"name\":\"间接分摊\",\n" +" \"parentCode\":\"STORE\"\n" +" }\n" +" ],\n" +" \"code\":\"STORE\",\n" +" \"name\":\"线下终端\"\n" +" }\n" +" ]\n" +" },\n" +" \"message\":\"success\"\n" +"}";}}
结果:
EasyExcel JSON数据多级表头导出相关推荐
- el-table 多级表头导出(适用于表头固定,表格有固定列)
在使用elementUI组件库开发中,少不了el-table的导出功能,以下是el-table多级表头固定,数据项固定情况下的导出功能! 首先需要安装以下依赖: 以下是本人依赖版本 html内容: 导 ...
- 阿里 easyExcel 动态写入数据,多级表头,单元格合并示例
excel写入流程 public static void main(String[] args) throws Exception {//标题List<List<String>> ...
- EasyExcel的数据写入和导出
目录 总体效果: 要上传的excel文件 postman请求服务器上传 写入数据库成功! 1.上传excel代码部分 引入easyexcel依赖 实体类 上传代码,此处为核心代码,每五条插入一次数据库 ...
- Vue用Export2Excel导出excel,多级表头数据
VUE 使用Export2Excel导出数据,以及多级表头 最近公司做项目,需要导出数据到excel表格 使用到了 element UI ,Export2Excel 特此记录,毕竟好记性不如烂笔头 不 ...
- 基于layui 的数据表格复杂表头导出到excel文件中
基于layui,js-xlsx的前台数据复杂表头导出到excel文件中 前言 : layui table 加载 layui 表头样式 4. 封装之后的sheet !cols !rows ! merge ...
- VUE项目实现表格导出EXCEL表格(自定义样式及多级表头)
第一:安装依赖 npm install -S file-saver xlsx npm install -D script-loader npm install -D xlsx-style (自定义样式 ...
- 用Notepad++ 宏功能 将json数据转换为EXCEL
JSON文件: {"hdBus": "sd","hdCode": "Code","hdType": ...
- 『解疑』前端通过json数据导出excel表格文件(支持多级表头、复杂表头)(json转excel)
问题 如何友好的通过规范的json数据导出成excel文件. 解题 制定规范的json数据结构: ( 只要将现有的数据处理成以下格式即可导出 ) {headerList: [ // 多级表头(2选1即 ...
- EasyExcel动态导出多级表头
EasyExcel动态导出多级表头 工具类 /*** 特殊表头导出方法* @param response* @param fileName* @param sheetName* @param list ...
最新文章
- 漫画:卷积神经网络为什么适合处理图片数据?
- 二维树状数组 ---- codeforces341D
- 【Matlab 控制】批量修改大型 Simulink 模型中模块的属性
- 【干货】容器适配器实现两个栈模拟队列
- Leetcode 534打劫房屋II python
- 4 contextHook
- 杭州获评全国最智慧城市
- tensorflow reduction_indices理解
- 计算机网络之万维网WWW
- SqlServer批量插入测试数据
- 用Gradle 构建你的android程序
- SQL 2008下载安装及问题解决
- 【阿朱一帖看尽】2014年BAT到底干了些什么
- (转载)0201 0402 0603 0805 1206焊盘封装尺寸
- 托管服务器ip绑定域名_如何在一台服务器上托管多个域名和项目
- 让终端窗口“下雪”的有趣指令
- rm -rf 命令 与正则表达式
- 台湾科技挣扎,人祸大于天灾?
- oracle查询某个时间段是否在另外一个时间段之内
- 这些车企在企业微信里,装上高速的“组织引擎”