String jsonStr = "{\"name\":\"aaa\",\"children\":[{\"name\":\"bbb\",\"children\":[{\"name\":\"eee\"},{\"name\":\"fff\",\"children\":[{\"name\":\"iii\"},{\"name\":\"jjj\",\"children\":[{\"name\":\"qqq\"},{\"name\":\"ttt\"}]}]},{\"name\":\"www\"}]},{\"name\":\"ccc\",\"children\":[{\"name\":\"ggg\"},{\"name\":\"hhh\",\"children\":[{\"name\":\"kkk\",\"children\":[{\"name\":\"ttt\"},{\"name\":\"mmm\"}]},{\"name\":\"uuu\"}]},{\"name\":\"ooo\"}]},{\"name\":\"ddd\",\"children\":[{\"name\":\"ggg\"},{\"name\":\"hhh\",\"children\":[{\"name\":\"kkk\"},{\"name\":\"uuu\"}]}]}]}";
Map tree = JSONObject.parseObject(jsonStr, Map.class);
tree2Excel(tree, "E:\\" + System.currentTimeMillis() + ".xls", "name", "children");
package pers.xxx.demo.tree2excel;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.Closeable;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.Map;
/**
* 树形结构数据导出excel工具
*
* Created by lzy on 2021/2/24 14:09
*/
@SuppressWarnings("ALL")
public class Tree2ExcelUtil {
/**
* 树形结构数据生成excel文件
*
* @param tree 树形数据
* @param filePath 文件路径
* @return
*/
public static boolean tree2Excel(Map tree, String filePath) {
return tree2Excel(tree, filePath, null, null);
}
/**
* 树形结构数据生成excel文件
*
* @param tree 树形数据
* @param filePath 文件路径
* @param lableName 标签Key名称
* @param childrenName 子节点Key名称
* @return
*/
public static boolean tree2Excel(Map tree, String filePath, String lableName, String childrenName) {
if (isBlank(filePath)) {
System.err.println("文件名称不能为空");
return false;
}
try {
doSame(tree, lableName, childrenName);
createExcel(filePath, tree);
return true;
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
/**
* 树形结构数据生成Workbook对象
*
* @param tree 树形数据
* @param fileSuf 文件后缀,xls/xlsx
* @return
*/
public static Workbook tree2Worbook(Map tree, String fileSuf) {
return tree2Worbook(tree, fileSuf, null, null);
}
/**
* 树形结构数据生成Workbook对象
*
* @param tree 树形数据
* @param fileSuf 文件后缀,xls/xlsx
* @param lableName 标签Key名称
* @param childrenName 子节点Key名称
* @return
*/
public static Workbook tree2Worbook(Map tree, String fileSuf, String lableName, String childrenName) {
if (isBlank(fileSuf)) {
System.err.println("必须指定文件后缀");
return null;
}
try {
doSame(tree, lableName, childrenName);
return procesData(tree, fileSuf);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
//具体实现
/**
* 标识最大列
*/
private static int maxCol = 0;
private static String lableName = "lable";
private static String childrenName = "children";
private static final String COL = "col";
private static final String ROW = "row";
private static final String ROW_OFT = "rowOft";
private static final String ROW_SIZE = "rowSize";
private static void doSame(Map tree, String lableName, String childrenName) {
if (!isBlank(lableName)) {
Tree2ExcelUtil.lableName = lableName;
}
if (!isBlank(childrenName)) {
Tree2ExcelUtil.childrenName = childrenName;
}
coreAlgoCol(tree, 1);
coreAlgoRow(tree);
}
/**
* 主要算法,计算列的坐标,计算每个节点所占行
*
* @param tree 数据
* @param col 递增的列
* @param trees 把高级别向下传递计算递增的行高
*/
private static void coreAlgoCol(Map tree, int col, Map... trees) {
tree.put(COL, col);
Object childrenObj = tree.get(childrenName);
if (childrenObj != null) {
List
到此这篇关于Java树形结构数据生成导出excel文件的文章就介绍到这了,更多相关Java树形结构数据生成导出excel内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!