[英]Find last row no in excel in a particular columnno using Apache poi
[英]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.