Java 将完整树导出到excel

Java 将完整树导出到excel,java,export-to-excel,oracle-adf,Java,Export To Excel,Oracle Adf,我正在尝试将完整的树导出到Excel,但遇到了一个问题 第一: 我的树至少有5层,但我只能打印其中两层。我不知道为什么它不会打印其余的孩子 第二: 如果添加了新的级别,我不想重新编写代码。有没有递归的解决方案?(主要是因为我的出口方式已经太大了) 导出方法: public static void exportDataDrillDownParamComercial(FacesContext facesContext, OutputStream outputStream, RichTreeT

我正在尝试将完整的树导出到Excel,但遇到了一个问题

  • 第一:
我的树至少有5层,但我只能打印其中两层。我不知道为什么它不会打印其余的孩子

  • 第二:
如果添加了新的级别,我不想重新编写代码。有没有递归的解决方案?(主要是因为我的出口方式已经太大了)

导出方法:

public static void exportDataDrillDownParamComercial(FacesContext facesContext, OutputStream outputStream, RichTreeTable tree) throws IOException {
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8")); 
CollectionModel treeModel = (CollectionModel) tree.getValue();
JUCtrlHierBinding treeBinding = (JUCtrlHierBinding) treeModel.getWrappedData();
List<JUCtrlHierNodeBinding> treeList = treeBinding.getChildren();
writer.write("Estrutura Comercial");writer.write(",");
writer.write("Estrutura Operacional Filtrada");writer.write(",");
writer.write("STK# Inicial (D-1)");writer.write(",");
writer.write("STK$ Inicial (D-1)"); writer.write(",");
writer.write("ROT Dias Inicial (D-1)");writer.write(",");
writer.write("MDQ% Vigor");writer.write(",");
writer.write("Presentation Stock");writer.write(",");
writer.write("MDQval Vigor");writer.write(",");
writer.write("VND ENA"); writer.write(",");
writer.write("VND REG U1S");writer.write(",");
writer.write("MDQval Novo");writer.write(",");
writer.write("ROT MDQ");writer.write(",");
writer.write("MDQ% Automático");writer.write(",");
writer.write("SS Vigor"); writer.write(",");
writer.write("FORECAST 2S");writer.write(",");
writer.write("VNDREG U2S");writer.write(",");
writer.write("IPSS% Automático");writer.write(",");
writer.write("SS Automático");writer.write(",");
writer.write("MDQ Rel. Automático");writer.write(",");
writer.write("MDQ% Min. Automático"); writer.write(",");
writer.write("Var. ROT MDQ");writer.write(",");
writer.write("Validade Var. ROT MDQ");writer.write(",");
writer.write("STK # Final");writer.write(",");
writer.write("STK $ Final");writer.write(",");
writer.write("ROT Dias Final");writer.write(",");
writer.write("MDQ% Final");writer.write(",");
writer.write("IPSS% Final");writer.write(",");
writer.write("SS Final");writer.write(",");
writer.write("MDQ Rel. Final");writer.write(",");
writer.write("MDQ% Mínimo Final");writer.write(",");            
writer.write("Data de Efetivação");writer.write(",");
writer.write("Var ROT Dias Automático");writer.write(",");
writer.write("Var STK # Automático");writer.write(",");
writer.write("Var STK # % Automático");writer.write(",");
writer.write("Var STK $ Automático");writer.write(",");
writer.write("Var STK $ % Automático");writer.write(",");
writer.write("Var MDQ% Automático");writer.write(",");
writer.write("Var ROT Dias Final");writer.write(",");
writer.write("Var STK # Final");writer.write(",");
writer.write("Var STK # % Final");writer.write(",");
writer.write("Var STK $ Final");writer.write(",");
writer.write("Var STK $ % Final");writer.write(",");
writer.write("Var MDQ% Final");writer.write(",");
writer.newLine();

for (int i = 0; i < treeList.size(); i++) {
    JUCtrlHierNodeBinding treeNode = treeList.get(i);
    Object[] treeAttrList = treeNode.getAttributes();
    for (int m = 0; m < treeAttrList.length ; m++) {
        Object attr = treeAttrList[m];
        if (attr instanceof java.lang.Long) {writer.write(((Long)attr).toString()); writer.write(";"); }
        if (attr instanceof java.lang.String) {writer.write(((String)attr)); writer.write(";"); }
    }
    writer.newLine();
    List<JUCtrlHierNodeBinding> subList = treeNode.getChildren();
    if(subList!=null) {
        for (int j = 0; j < subList.size(); j++) {
            JUCtrlHierNodeBinding subNode = subList.get(j);
            Object[] subAttrList = subNode.getAttributes();
            writer.write(";");writer.write(";");writer.write(";");writer.write(";");

            for (int n = 0; n < subAttrList.length ; n++) {
                Object subAttr = subAttrList[n];
                if(subAttr instanceof java.lang.Long) { writer.write(((Long)subAttr).toString()); writer.write(";"); }
                if(subAttr instanceof java.lang.String) { writer.write(((String)subAttr)); writer.write(";"); }
                if(subAttr instanceof oracle.jbo.domain.Date) { writer.write(((oracle.jbo.domain.Date)subAttr).stringValue()); writer.write(";"); }             
            }
            writer.newLine();               
        }
    }
    writer.newLine();
}
writer.flush();
}
public static void exportdatadrilldowncommerical(FacesContext FacesContext,OutputStream OutputStream,RichTreeTable树)引发IOException{
BufferedWriter writer=新的BufferedWriter(新的OutputStreamWriter(outputStream,UTF-8));
CollectionModel树模型=(CollectionModel)树。getValue();
JUCtrlHierBinding treeBinding=(JUCtrlHierBinding)treeModel.getWrappedData();
List treeList=treeBinding.getChildren();
writer.write(“Estrutura Commercial”);writer.write(“,”);
writer.write(“Estrutura Operacional Filtrada”);writer.write(“,”);
writer.write(“STK#inical(D-1)”;writer.write(“,”);
writer.write(“STK$INICAL(D-1)”;writer.write(“,”);
writer.write(“ROT Dias Inicial(D-1)”;writer.write(“,”);
writer.write(“MDQ%活力”);writer.write(“,”;
writer.write(“展示股票”);writer.write(“,”);
writer.write(“MDQval活力”);writer.write(“,”);
writer.write(“VND ENA”);writer.write(“,”);
writer.write(“VND REG U1S”);writer.write(“,”);
writer.write(“MDQval Novo”);writer.write(“,”);
writer.write(“ROT-MDQ”);writer.write(“,”);
writer.write(“MDQ%Automático”);writer.write(“,”);
writer.write(“SS活力”);writer.write(“,”);
writer.write(“预测2”);writer.write(“,”);
writer.write(“VNDREG U2S”);writer.write(“,”);
writer.write(“IPSS%Automático”);writer.write(“,”;
writer.write(“SS Automático”);writer.write(“,”);
writer.write(“MDQ Rel.Automático”);writer.write(“,”);
writer.write(“MDQ%Min.Automático”);writer.write(“,”;
writer.write(“Var.ROT MDQ”);writer.write(“,”);
writer.write(“Validade Var.ROT MDQ”);writer.write(“,”);
writer.write(“STK#Final”);writer.write(“,”;
writer.write(“STK$Final”);writer.write(“,”);
writer.write(“ROT Dias Final”);writer.write(“,”);
writer.write(“MDQ%最终版”);writer.write(“,”;
writer.write(“IPSS%最终版”);writer.write(“,”;
writer.write(“SS最终版”);writer.write(“,”);
writer.write(“MDQ Rel.Final”);writer.write(“,”);
writer.write(“MDQ%Mínimo最终版”);writer.write(“,”);
writer.write(“数据的有效性”);writer.write(“,”);
writer.write(“Var ROT Dias Automático”);writer.write(“,”);
writer.write(“Var STK#Automático”);writer.write(“,”;
writer.write(“Var STK#%Automático”);writer.write(“,”;
writer.write(“Var STK$Automático”);writer.write(“,”);
writer.write(“Var STK$%Automático”);writer.write(“,”;
writer.write(“Var-MDQ%Automático”);writer.write(“,”);
writer.write(“Var ROT Dias Final”);writer.write(“,”);
writer.write(“Var STK#Final”);writer.write(“,”);
writer.write(“Var STK#%Final”);writer.write(“,”;
writer.write(“Var STK$Final”);writer.write(“,”);
writer.write(“Var STK$%Final”);writer.write(“,”;
writer.write(“Var MDQ%最终版”);writer.write(“,”;
writer.newLine();
对于(int i=0;i
你的问题是你有你的标题“,”分开了,但是你的数据“;”分开了,在你循环了treeList.size()之后,你还有换行符();然后循环遍历子列表,它会给您另一行代码,但这里修改了代码的后半部分,请尝试

for (int i = 0; i < treeList.size(); i++) {
    JUCtrlHierNodeBinding treeNode = treeList.get(i);
    Object[] treeAttrList = treeNode.getAttributes();
    for (int m = 0; m < treeAttrList.length ; m++) {
        Object attr = treeAttrList[m];
        if (attr instanceof java.lang.Long) {writer.write(((Long)attr).toString()); writer.write(","); }
        if (attr instanceof java.lang.String) {writer.write(((String)attr)); writer.write(","); }
    }
    //writer.newLine();
    List<JUCtrlHierNodeBinding> subList = treeNode.getChildren();
    if(subList!=null) {
        for (int j = 0; j < subList.size(); j++) {
            JUCtrlHierNodeBinding subNode = subList.get(j);
            Object[] subAttrList = subNode.getAttributes();
            writer.write(",");writer.write(",");writer.write(",");writer.write(",");

            for (int n = 0; n < subAttrList.length ; n++) {
                Object subAttr = subAttrList[n];
                if(subAttr instanceof java.lang.Long) { writer.write(((Long)subAttr).toString()); writer.write(","); }
                if(subAttr instanceof java.lang.String) { writer.write(((String)subAttr)); writer.write(","); }
                if(subAttr instanceof oracle.jbo.domain.Date) { writer.write(((oracle.jbo.domain.Date)subAttr).stringValue()); writer.write(","); }             
            }
            writer.newLine();               
        }
    }
    writer.newLine();
}
writer.flush();
}
for(int i=0;i