CellWriteHandlerContext上下文信息获取
获取总行数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16public class FormulaCellWriteHandler implements CellWriteHandler {
public void afterCellDispose(CellWriteHandlerContext context) {
// 获取当前sheet
WriteSheetHolder writeSheetHolder = context.getWriteSheetHolder();
// 获取当前sheet的总行数
int totalRows = writeSheetHolder.getSheet().getLastRowNum();
Cell cell = context.getCell();
// 判断是否是最后一行的第三列(C列)
if (cell.getRowIndex() == totalRows && cell.getColumnIndex() == 2) {
// 设置求和公式,从第2行开始到最后一行
cell.setCellFormula("SUM(C2:C" + totalRows + ")");
}
}
}上下文中可获取的信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16// 行相关
context.getRow(); // 当前行
context.getRowIndex(); // 当前行号
context.getRelativeRowIndex(); // 相对行号(不包括表头)
// 列相关
context.getCell(); // 当前单元格
context.getColumnIndex(); // 当前列号
context.getHead(); // 表头信息
// Sheet相关
context.getWriteSheetHolder(); // Sheet相关信息
context.getWriteTableHolder(); // Table相关信息
// 工作簿相关
context.getWriteWorkbookHolder(); // 工作簿相关信息实际应用示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27public class FormulaCellWriteHandler implements CellWriteHandler {
public void afterCellDispose(CellWriteHandlerContext context) {
WriteSheetHolder writeSheetHolder = context.getWriteSheetHolder();
Sheet sheet = writeSheetHolder.getSheet();
// 当前行号
int currentRowIndex = context.getRowIndex();
// 总行数
int totalRows = sheet.getLastRowNum();
// 当前列号
int columnIndex = context.getColumnIndex();
// 判断是否是最后一行的金额列
if (currentRowIndex == totalRows && columnIndex == 2) {
Cell cell = context.getCell();
// 设置公式
cell.setCellFormula("SUM(C2:C" + totalRows + ")");
// 设置样式
CellStyle style = context.getWriteWorkbookHolder().getWorkbook().createCellStyle();
style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
cell.setCellStyle(style);
}
}
}注意事项
- getLastRowNum()返回的是最后一行的索引(从0开始)
- 需要考虑表头行的影响
- 相对行号不包括表头行
- 可以通过上下文获取完整的写入信息