java 将三层树结构数据导出为excel
时间: 2025-06-26 07:16:37 浏览: 19
### Java 实现三层树形结构数据导出至 Excel 的方法
以下是基于 Apache POI 库实现将三层树形结构数据导出到 Excel 文件的示例代码。此代码假设每层节点具有特定属性(如 `hierarchy` 和子节点列表),并通过递归方式构建表格。
#### 示例代码
```java
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
public class TreeToExcelExporter {
public static void exportTreeData(List<TreeNode> rootNodes, String filePath) throws IOException {
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Tree Data");
// 设置表头
Row headerRow = sheet.createRow(0);
String[] headers = {"层级", "物料编码", "物料名称", "基础数量", "使用数量", "BOM版本", "默认BOM"};
for (int i = 0; i < headers.length; i++) {
Cell cell = headerRow.createCell(i);
cell.setCellValue(headers[i]);
}
int rowIndex = 1;
for (TreeNode node : rootNodes) {
writeNode(sheet, node, rowIndex++);
}
try (FileOutputStream fileOut = new FileOutputStream(filePath)) {
workbook.write(fileOut);
}
workbook.close();
}
private static void writeNode(Sheet sheet, TreeNode node, int rowIndex) {
Row row = sheet.createRow(rowIndex);
row.createCell(0).setCellValue(node.getHierarchy());
row.createCell(1).setCellValue(node.getMaterialCode() != null ? node.getMaterialCode() : "");
row.createCell(2).setCellValue(node.getMaterialName() != null ? node.getMaterialName() : "");
row.createCell(3).setCellValue(node.getMaterialNum() != null ? node.getMaterialNum().toString() : "");
row.createCell(4).setCellValue(node.getUseAmount() != null ? node.getUseAmount().toString() : "");
row.createCell(5).setCellValue(node.getVersion() != null ? node.getVersion() : "");
row.createCell(6).setCellValue(node.isDefaults());
List<TreeNode> children = node.getChildren();
if (children != null && !children.isEmpty()) {
for (TreeNode child : children) {
writeNode(sheet, child, ++rowIndex); // 递归写入子节点
}
}
}
public static void main(String[] args) throws IOException {
// 构建测试数据
TreeNode rootNode1 = new TreeNode("L1");
TreeNode childNode1_1 = new TreeNode("L2").setMaterialCode("M1").setMaterialName("Item1");
TreeNode childNode1_2 = new TreeNode("L2").setMaterialCode("M2").setMaterialName("Item2");
rootNode1.addChild(childNode1_1).addChild(childNode1_2);
TreeNode grandChildNode1_1_1 = new TreeNode("L3").setMaterialCode("M3").setMaterialName("SubItem1");
childNode1_1.addChild(grandChildNode1_1_1);
List<TreeNode> treeData = List.of(rootNode1);
// 导出到文件
exportTreeData(treeData, "tree_data.xlsx");
}
}
class TreeNode {
private String hierarchy;
private String materialCode;
private String materialName;
private BigDecimal materialNum;
private BigDecimal useAmount;
private String version;
private boolean defaults;
private List<TreeNode> children;
public TreeNode(String hierarchy) {
this.hierarchy = hierarchy;
}
public String getHierarchy() { return hierarchy;}
public String getMaterialCode() {return materialCode;}
public String getMaterialName() {return materialName;}
public BigDecimal getMaterialNum() {return materialNum;}
public BigDecimal getUseAmount() {return useAmount;}
public String getVersion() {return version;}
public boolean isDefaults() {return defaults;}
public TreeNode setMaterialCode(String materialCode) {this.materialCode = materialCode; return this;}
public TreeNode setMaterialName(String materialName) {this.materialName = materialName; return this;}
public TreeNode setMaterialNum(BigDecimal materialNum) {this.materialNum = materialNum; return this;}
public TreeNode setUseAmount(BigDecimal useAmount) {this.useAmount = useAmount; return this;}
public TreeNode setVersion(String version) {this.version = version; return this;}
public TreeNode setDefaults(boolean defaults) {this.defaults = defaults; return this;}
public List<TreeNode> getChildren() {return children;}
public TreeNode addChild(TreeNode child){
if(this.children == null)this.children = List.newArrayList();
this.children.add(child);
return this;
}
}
```
上述代码通过递归遍历树形结构中的每一层节点,并将其对应的属性值填充到 Excel 表格中[^4]。
---
### 关键点说明
1. **Apache POI** 是一种强大的 Java 工具库,用于操作 Microsoft Office 文档,支持 `.xlsx` 格式的读取和写入。
2. 上述代码实现了对树形结构数据的逐层展开,并按照指定列顺序输出到 Excel 中。
3. 如果需要扩展功能(如样式设置或复杂校验逻辑),可以进一步增强代码逻辑[^5]。
---
阅读全文
相关推荐




















