POI 单元格垂直居中,相同内容的单元格合并
程序员文章站
2022-07-13 15:22:40
...
XSSFCellStyle cellStyle = wb.createCellStyle();
cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); // 居中
cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);//垂直
int currnetRow = 5;//开始查找的行
for (int p = 5; p < totalRow; p++) {//totalRow 总行数
XSSFCell currentCell = sheet.getRow(p).getCell(0);
String current = getStringCellValue(currentCell);
log.info(" current = "+current);
XSSFCell nextCell = null;
String next = "";
if(p < totalRow+1){
XSSFRow nowRow = sheet.getRow(p+1);
if(nowRow != null){
nextCell = nowRow.getCell(0);
next = getStringCellValue(nextCell);
}else{
next = "";
}
}else{
next = "";
}
log.info(" next = "+next);
if(current.equals(next)){//比对是否相同
currentCell.setCellValue("");
continue;
}
else{
sheet.addMergedRegion(new CellRangeAddress(currnetRow, p, 0, 0));//合并单元格
XSSFCell nowCell = sheet.getRow(currnetRow).getCell(0);
nowCell.setCellValue(current);
nowCell.setCellStyle(cellStyle);
currnetRow = p + 1;
}
}
private String getStringCellValue(XSSFCell cell) {
String strCell = "";
if (cell != null) {
switch (cell.getCellType()) {
case XSSFCell.CELL_TYPE_STRING:
strCell = cell.getStringCellValue();
break;
case XSSFCell.CELL_TYPE_NUMERIC:
strCell = String.valueOf(cell.getNumericCellValue());
break;
case XSSFCell.CELL_TYPE_BOOLEAN:
strCell = String.valueOf(cell.getBooleanCellValue());
break;
case XSSFCell.CELL_TYPE_BLANK:
strCell = "";
break;
default:
strCell = "";
break;
}
if (strCell.equals("") || strCell == null) {
return "";
}
if (cell == null) {
return "";
}
}
return strCell;
}