地图和Jxls -处理不同的excel表格单独与xlstrtransformer



我有一个excel模板,其中有两个工作表,我想通过XLSTransformer填充。这两个表的数据是不同的(不同长度的列表,其中一个取表的结果——参见下面的代码),这意味着我不能通过一个映射传递它们。我尝试了两个地图:

     //for the first excel sheet     
     Map<String, List<ListData>> beanParams = new HashMap<String, List<ListData>>();
     beanParams.put("rs", rs); 
     //for the second one  
     Map<String, List<DetailResult>> beanParams2 = new HashMap<String, List<DetailResult>>();
     beanParams2.put("detRes", detRes); 
     XLSTransformer former = new XLSTransformer();
     former.transformXLS(srcFilePath, beanParams, destFilePath);
     former.transformXLS(srcFilePath, beanParams2, destFilePath);

列表如下:

    List<Results> rs = new ArrayList<Results>();
    Results s1 = new Results(compteurFemme, compteurHomme, compteurTot, averageTempsFemme, averageTempsHomme, averageTempsTot);
    rs.add(s1);
    List<ResultsDetails> detRes = new ArrayList<ResultsDetails>();
    for(int i=0; i<tableau.getRowCount(); i++){
        ResultsDetails newRes = new ResultsDetails(item[i], rep[i], justefaux[i], tempsrep[i]);
        item[i]=((DataIdGenre) tableau.getModel()).getValueAt(i, 2).toString();
        rep[i]=((DataIdGenre) tableau.getModel()).getValueAt(i, 3).toString();
        justefaux[i]=((DataIdGenre) tableau.getModel()).getValueAt(i, 4).toString();
        tempsrep[i]=((DataIdGenre) tableau.getModel()).getValueAt(i, 5).toString();
        detRes.add(newRes);
    }

两个导出分别在各自的工作表上工作,但两个导出一起擦除第一个。

然后我尝试使用某种multimap,用一个键(我在excel中输入的那个键)表示两个值

     Map<String, List<Object>> hm = new HashMap<String, List<Object>>();
     List<Object> values = new ArrayList<Object>();
     values.add(rs);
     values.add(detRes);
     hm.put("det", values);
     XLSTransformer former = new XLSTransformer();
     former.transformXLS(srcFilePath, hm, destFilePath);

但是我得到了一个错误,告诉我数据是不可访问的。

所以我的问题是,当使用XLSTransformer时,是否有一种方法可以直接处理不同的表?

好的,我想到了一些东西,通过一个临时文件:

   private void exportDataDet(File file) throws ParseException, IOException, ParsePropertyException, InvalidFormatException {
    List<ResultsDetails> detRes = generateResultsDetails();
    try(InputStream is = IdGenre.class.getResourceAsStream("/xlsTemplates/IdGenre/IdGenre_20-29_+12.xlsx")) {
        try (OutputStream os = new FileOutputStream("d:/IdGenreYOLO.xlsx")) {
            Context context = new Context();
            context.putVar("detRes", detRes);
            JxlsHelper.getInstance().processTemplate(is, os, context);
        }
    }
}

private void exportData(File file) throws ParseException, IOException, ParsePropertyException, InvalidFormatException {
    List<Results> rs = generateResults();
 try{
     String srcFilePath = "d:/IdGenreYOLO.xlsx";
     String destFilePath = "d:/IdGenreRes.xlsx";
     Map<String, List<Results>> beanParams = new HashMap<String, List<Results>>();
     beanParams.put("rs", rs);
     XLSTransformer former = new XLSTransformer();
     former.transformXLS(srcFilePath, beanParams, destFilePath);
    }
    finally{
        Path path = Paths.get("d:/IdGenreYOLO.xlsx");
        try{
            Files.delete(path);
        }
        finally{}
    }
}

这可能不是最好的解决方案,甚至更多,因为我必须添加其他数据,不能适合两个现有的列表,并且-至少现在-它将通过第二个临时文件来完成。

我没有使用相同的方法两次,因为XLSTransformer是唯一一个我能够在我给出的excel模板中进行操作的(我无法修改)。

我愿意接受任何建议

最新更新