繁体   English   中英

Apache POI excel按特定顺序打印小计

[英]Apache POI excel print subtotals in a particular order

我有一个资产POJO:

public class Asset implements Serializable {
    //serialVersionUID 
    private String quarter;
    private String assetType;
    private BigDecimal assetAttributes;
// more assetAttributes like price, etc, getters and setters
}

然后,我有此方法,该方法获取此POJO和Apache POI工作表的列表,并将列表内容写入工作表:

public void addContent (List<Asset> listOfAsset, Sheet sheet) {
    //make a row counter and a cell counter
    SortedSet<String> quarters = new TreeSet<String>();
    for (Asset asset : listOfAsset) {
      quarters.add(asset.getQuarter());
      //write content to sheet
      row.createCell().setCellValue();
    }
    addSubtotals();
}

然后我有addSubtotals方法,该方法获取必要的信息并执行SUMIF公式:

private void addSubtotals (//params) {
    for (String s : quarters) {
      Row row = sheet.createRow(rowCounter++);
      row.createCell(0).setCellValue(// quarter);
      for (int i = 2; i < cellCounter; i++) {
        row.createCell(i).setCellFormula(
        "SUMIF(// if the printed quarter equals the one in the quarters set, 
            then add all the attributes for all asset types)");
      }
   }
}

一切都很好,除了小计全部在列表的底部。 每个季度后如何计算小计? 我不提前知道会有多少个季度,或者每个季度有多少种资产类型。

我考虑过将小计方法放入添加内容的for循环中,但是我无法执行SUMIF,因为季度和资产类型的数量未知。 我可以做一个TreeMap,但是我不确定细节。

您可能需要提前对资产pojo进行分类。 您需要创建一个地图(字符串,地图(字符串,资产)),该地图代表将资产类型映射到资产的季度地图。 然后,您可以使用3嵌套循环在每个季度,然后在该季度内的每种资产类型,然后在每个资产之上循环。 如果顺序很重要,请使用树形图实现。 这样,当您到达资产类型或季度的末尾时,您便可以执行特殊的操作,甚至可以使用循环本身中的局部变量来跟踪总计。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM