gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:04:40 25 4
gpt4 key购买 nike

我有一个 Assets 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 Sheet 的列表,并将列表内容写入表中:

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)");
}
}
}

这一切都工作正常,除了小计都在列表的底部。每个季度后如何进行小计?我提前不知道会有多少个季度,或者每个季度会有多少种 Assets 类型。

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

最佳答案

您可能需要提前对 Assets pojo 进行分类。您需要创建一个 Map (String, Map(String, Asset)),它表示季度到 Assets 类型到 Assets 的映射。然后,您可以使用 3 嵌套循环循环每个季度,然后循环该季度内的每种 Assets 类型,然后循环每个 Assets 。如果顺序很重要,请使用树形图实现。这样做将使您能够在到达 Assets 类型或季度末时执行一些特殊操作,甚至可以使用循环本身中的局部变量来跟踪总计。

关于java - Apache POI excel 按特定顺序打印小计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19009426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com