我有一个资产 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,但我不确定细节。