/**
* 合并单元格
* @param sheet 要合并单元格的excel 的sheet
* @param cellLine要合并的列
* @param startRow 要合并列的开始行
* @param endRow要合并列的结束行
*/
private static void addMergedRegion(XSSFSheet sheet, int cellLine,int startRow, int endRow, XSSFWorkbook workbook) {
XSSFCellStyle style = workbook.createCellStyle(); // 样式对象
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平
// 获取第一行的数据,以便后面进行比较
String s_will = sheet.getRow(startRow).getCell(cellLine).getStringCellValue();
int count = 0;
boolean flag = false;
for (int i = 1; i <= endRow; i++) {
String s_current = sheet.getRow(i).getCell(0).getStringCellValue();
if (s_will.equals(s_current)) {
s_will = s_current;
if (flag) {
sheet.addMergedRegion(new CellRangeAddress( startRow - count, startRow, cellLine, cellLine));
XSSFRow row = sheet.getRow(startRow - count);
String cellValueTemp = sheet.getRow(startRow - count).getCell(0).getStringCellValue();
XSSFCell cell = row.createCell(0);
cell.setCellValue(cellValueTemp); // 跨单元格显示的数据
cell.setCellStyle(style); // 样式
count = 0;
flag = false;
}
startRow = i;
count++;
} else {
flag = true;
s_will = s_current;
}
if (i == endRow && count > 0) {
sheet.addMergedRegion(new CellRangeAddress(endRow - count,endRow, cellLine, cellLine));
String cellValueTemp = sheet.getRow(startRow - count).getCell(0).getStringCellValue();
XSSFRow row = sheet.getRow(startRow - count);
XSSFCell cell = row.createCell(0);
cell.setCellValue(cellValueTemp); // 跨单元格显示的数据
cell.setCellStyle(style); // 样式
}
}
}