java poi 导出中利用sum函数实现合计功能
之前也写过导出功能但是没有写过合计.所以记录下来当做笔记.
for(int i = 0; i < arrSize; i++) {
JSONObject item = dataListArr.getJSONObject(i);
HSSFRow row = sheet.createRow(i + 1);
HSSFCell cell0 = row.createCell(0);
cell0.setCellValue(i + 1);
HSSFCell cell1 = row.createCell(1);
cell1.setCellValue(item.get("farmerName") != null ? item.get("farmerName").toString() : "");
HSSFCell cell2 = row.createCell(2);
//0对应的是double型数值 新版本此方法过期可以用新方法
cell2.setCellType(0);
cell2.setCellValue(item.get("crabCultivationSpecification") != null ? Double.valueOf(item.get("crabCultivationSpecification").toString()) : 0.0);
...
HSSFCell cell8 = row.createCell(8);
cell8.setCellValue(item.get("cultivationTime") != null && !"".equals(item.get("cultivationTime").toString())? BusinessService.formatTime(item.get("cultivationTime").toString().substring(0, 8)) : "");
}
//合计功能 sum也可以替换成其他的函数
HSSFRow row = sheet.createRow(arrSize+1);
HSSFCell cell = row.createCell(0);
cell.setCellValue("合计");
for (int i = 2; i < 8; i++) { //i代表是第几列
cell = row.createCell(i);//设置公式前,一定要先建立表格
String colString = CellReference.convertNumToColString(i); //长度转成ABC列
String sumstring = "SUM(" + colString + "2:" + colString + (arrSize+1) + ")";//求和公式
sheet.getRow(arrSize+1).getCell(i).setCellFormula(sumstring);
}
需要注意的是:
- arrSize代表是行数,在求和公式中arrSize需要+1,不然统计的行数不正确,因为合计是占一行的(想不明白就自己新建个excel),同理求和函数也可以换成excel中其他的函数.
- String colString = CellReference.convertNumToColString(i);
//长度转成ABC列这句话就是把行列转成ABCD那种格式,想想求和公式=SUM(A1:A4)就是转成里面的A这种,实在想不明白就别想了,记住要加就行. - 期间遇到一个问题就是,数据库导出的数据写到excel中是String格式,后来百度了一下才知道,源数据是什么类型写到excel中就是什么类型,用cell2.setCellType(0);就行.