//存放数据的二维集合,twoDimensional 中每个List是树状结构的一个分支的所有数据List<List<JSONObject>> twoDimensional = new ArrayList<>();//创建对象XSSFWorkbook xwb = new XSSFWorkbook();//创建工作表Sheet sheet = xwb.createSheet("统计");//动态创建首行表头Row firstRow = sheet.createRow(0);JSONObject cm = new JSONObject(columnMap);for (int i = 0; i < tier+keys.size(); i++) {Cell cell = firstRow.createCell(i);if (i<tier){String s="一";switch (i){case 1 : s="二";break;case 2 : s="三";break;}cell.setCellValue(s+"级分类");}else {cell.setCellValue(cm.getString(keys.get(i - tier)));}}

绘制完表头如下:

        //动态绘制数据,tier是层级数,根据业务最多三级for (int i = 0; i < twoDimensional.size(); i++) {Row row = sheet.createRow(i+1);List<JSONObject> list = twoDimensional.get(i);for (int j = 0; j < keys.size()+tier; j++) {Cell cell = row.createCell(j);if (j<tier){//绘制层级标签if (j==0){JSONObject jsonObject = list.get(tier - 1);cell.setCellValue(jsonObject.getString("dictLabel"));continue;}if (j==1){Map map = list.get(tier - 2);cell.setCellValue((String)map.get("dictLabel"));continue;}if (j==2){Map map = list.get(tier - 3);cell.setCellValue((String)map.get("dictLabel"));continue;}}else {//绘制层级的数据JSONObject bean = new JSONObject(list.get(0));cell.setCellValue(bean.getString(keys.get(j - tier)));}}}//添加总合计行,并合并单元格Row totalRow = sheet.createRow(twoDimensional.size()+1);for (int j = 0; j < keys.size()+tier; j++) {Cell cell = totalRow.createCell(j);if (j<tier){cell.setCellValue("合计");}else {cell.setCellValue(topBean.getString(keys.get(j - tier)));}}if (tier != 1){sheet.addMergedRegion(new CellRangeAddress(twoDimensional.size()+1,twoDimensional.size()+1,0,tier-1));}

添加数值后如下:

        //合并相同的单元格int lastRowNum = sheet.getLastRowNum();int index = 0;//根据业务只有标签这几列需要合并for (int i = 0; i < tier-1; i++) {//比较相邻cell的值是否相同,并记录for (int j = 0; j < lastRowNum; j++) {Row row = sheet.getRow(j);Cell cell = row.getCell(i);String stringCellValue = cell.getStringCellValue();if ("合计".equals(stringCellValue)){sheet.addMergedRegion(new CellRangeAddress(j,j,i,i+1));continue;}Row nextRow = sheet.getRow(j+1);Cell nextcell = nextRow.getCell(i);String nextStringCellValue = nextcell.getStringCellValue();if (stringCellValue.equals(nextStringCellValue)){if (j+1 == lastRowNum){if (index != 0){sheet.addMergedRegion(new CellRangeAddress(j-index,j+1,i,i));index = 0;}}else {index++;}}else {if (index != 0){sheet.addMergedRegion(new CellRangeAddress(j-index,j,i,i));index = 0;}}}}return xwb;

合并后最终如下:

Excel树状数据绘制导出相关推荐

  1. 利用python决策树分析iris数据及树状图绘制

    利用python决策树分析iris数据及树状图绘制 数据说明 数据划分 模型训练及评估 模型训练代码 模型大致评估 树状图绘制 Graphviz安装配置及入门 代码汇总 基地部门公众号 数据说明 数据 ...

  2. 递归查询数据库中树状数据

    通过sql函数去对数据库中的树状数据进行操作 表结构 1.sql 形式 自定义一个函数getChildList(rootId INT)通过根Id遍历他的子节点 自定义函数 DELIMITER // C ...

  3. Excel如何将数据内容导出为UTF-8的文本文件?

    今天要和大家分享的是,Excel如何将数据内容导出为UTF-8的文本文件?如下图所示的表格内容,我们都知道文本导入到网页中大多会以乱码显示,是因为网页多以utf-8对汉字进行编码,所以-- (方方格子 ...

  4. php inputcsv,php excel格式(csv)数据导入导出(示例)

    需要把大量数据导入数据库中,比如考试成绩.电话簿等一般都是存放在excel中的数据,可以考虑把excel导出成csv文件. 然后,通过以下程序即可批量导入数据到数据库中,上传csv并导入到数据库中,测 ...

  5. matlab自动生成excel工作区,matlab数据怎么导出excel表格-matlab工作区数据怎么转为excel...

    怎样将MATLAB中的数据输出到excel中 使用 xlswrite()函数可以将matlab中数据保存到excel中,请看下面例子: >> data = magic(5) % 示例数据 ...

  6. php把搜索的结果导出,excel表格查找数据之后导出-如何将Excel查找全部后得到的内容Copy出来...

    PHP如何将查询出来的数据导出成excel表格(最好做... 1.选中第一行(整行), 2工具栏中的数据,再点击筛选(到第一行中有箭头) 3.在要选的列中点击三角箭头 4.见图: 5.见图: 6.在框 ...

  7. 根据树状数据渲染树状下拉选项

    最终的效果类似这样: 作者是把非末级的选项给禁用了,如果你们需求是要不禁用求留意笔者渲染时的操作. 接下来我们一起来做这个效果: 笔者所用的是react + antd,用其他的架构也是类似,请自行举一 ...

  8. Tree Map:树状图——绘制COVID-19阵列图

    Tree Map树状图, 可视化 饼状图用于表示每个数据在总体中的占比, 但当数据个体数量较多,规模差异较大时, 饼状图无法很好展现. 树状图是一种通过空间填充占比展示数据比率的可视化方式.能够很好的 ...

  9. excel两列数据绘制单折线图表

    目录 1. 折线图(二维) 2. x轴y轴散点图(可操作横轴) 有关excel的两列数据绘制出一张折线图或柱状图的方法.要求两列数据分别成为图表的横坐标和纵坐标. 1. 折线图(二维) 首先,打开ex ...

  10. java 树状数据,递归 从子节点找父节点

    前言:递归算法在项目中也会使用到,简单介绍一下在项目中使用到的场景 递归方法实现三个要素: 1.明确递归终止条件: 2.给出递归终止时的处理办法: 3.提取重复的逻辑,缩小问题的规模. 场景一:根据树 ...

最新文章

  1. 鞭策你一辈子的好文章
  2. glibc free 死锁
  3. pytorch扩展——如何自定义前向和后向传播
  4. Oracle视图、自定义函数、存储过程、触发器
  5. MongoDB 复制集节点增加移除及节点属性配置
  6. php防止SQL注入
  7. python决策树分类wine_Python写算法:二元决策树
  8. 使用文本/CAD数据集添加地图注记
  9. 搭建AutoCAD License服务器
  10. 查找对方IP地址技巧五招
  11. vistor和tsmserver不在同一台机器上的连接问题
  12. Altium Designer制作原理图库不显示Comment和Designator
  13. 手机dpi修改工具_修改手机的分辨率,让你的手机更流畅
  14. 如何使用WordPress建立一个博客、网站和论坛
  15. 2021毕业年的最后一躺
  16. 优秀网站源码、编程源码下载网站大集中
  17. LeetCode - 794 - 有效的井字游戏 - java
  18. 基于OHCI的USB主机 —— UFI数据结构3
  19. 一个震惊日本的广告:中国人,奇强!!!
  20. 提示“请输入有效值,两个最接近的有效值为0,1”问题

热门文章

  1. php网页代码字体大小,html字体大小怎么设置
  2. wordpress 占有率_降低WordPress网站跳出率的10条提示
  3. java.lang.NoClassDefFoundError: Could not initialize class com.cyj.util.Jdbc
  4. 中国云计算的发展历史
  5. 敏捷-《如何准备ACP考试》知识图谱
  6. [渗透测试]ATTCK实战 | Vulnstack 红队(一)
  7. 03-平方矩阵的快速解法
  8. SD卡启动第二篇 (手动导入系统到SD卡分区)
  9. 密码学基础(数学理论)
  10. CentOS设置SSH Key登录