效果图

mavan依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
代码
package com.cd.test2;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.CellUtil;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class TreeDataToExcel {
public static class TreeNode {
private String name;
private List<TreeNode> children;
public TreeNode(String name) {
this.name = name;
this.children = new ArrayList<>();
}
public void addChild(TreeNode child) {
this.children.add(child);
}
}
public static void main(String[] args) throws IOException {
TreeNode rootNode = createSampleTreeData();
try (Workbook workbook = new XSSFWorkbook(); FileOutputStream fileOut = new FileOutputStream("exported_tree_with_header.xlsx")) {
Sheet sheet = workbook.createSheet("Tree Data");
createHeader(sheet);
fillTreeData(sheet, rootNode, 1, 0);
workbook.write(fileOut);
}
}
private static void createHeader(Sheet sheet) {
Row headerRow = sheet.createRow(0);
for (int i = 0; i < 3; i++) {
Cell headerCell = headerRow.createCell(i);
headerCell.setCellValue("表头");
}
sheet.autoSizeColumn(0);
}
private static TreeNode createSampleTreeData() {
TreeNode rootNode = new TreeNode("Root");
TreeNode child1 = new TreeNode("Child1");
TreeNode child2 = new TreeNode("Child2");
TreeNode subChild1 = new TreeNode("Subchild1");
TreeNode subChild2 = new TreeNode("Subchild2");
TreeNode subChild3 = new TreeNode("Subchild3");
rootNode.addChild(child1);
rootNode.addChild(child2);
child1.addChild(subChild1);
child2.addChild(subChild2);
child2.addChild(subChild3);
return rootNode;
}
private static int fillTreeData(Sheet sheet, TreeNode node, int rowStart, int colStart) {
Row row = sheet.getRow(rowStart) == null ? sheet.createRow(rowStart) : sheet.getRow(rowStart);
Cell cell = row.createCell(colStart);
cell.setCellValue(node.name);
if (node.children.isEmpty()) {
return 1;
} else {
int totalRows = 0;
int childrenColStart = colStart + 1;
for (TreeNode child : node.children) {
int childRows = fillTreeData(sheet, child, rowStart + totalRows, childrenColStart);
totalRows += childRows;
}
if (totalRows > 1) {
sheet.addMergedRegion(new CellRangeAddress(rowStart, rowStart + totalRows - 1, colStart, colStart));
CellUtil.setVerticalAlignment(cell, VerticalAlignment.CENTER);
CellUtil.setAlignment(cell, HorizontalAlignment.CENTER);
}
return totalRows;
}
}
}