アセット 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();
}
次に、必要な情報を取得して SUMIF 式を実行する addSubtotals メソッドがあります。
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 を実行できる可能性がありますが、詳細についてはわかりません。