主要实现效果
主要思路
实现代码
- 数据写入部分正常操作、就不贴了
- 将数据全部写入完成后 计算单元格合并位置(注意合并时会默认保留第一行/列的值)
- 主要实现代码
sheet.addMergedRegion(new CellRangeAddress(firstRow, lastRow, firstCol, lastCol));
firstRow:开始行
lastRow:结束行
firstCol:开始列
lastCol:结束列
private void cellMerge(XSSFSheet sheet, List<CaseItem> caseList) {
int startIndex = 0;
for (int i = 0; i < caseList.size(); i++) {
int startRow = i + 2;
CaseItem caseItem = caseList.get(i);
int cellNum = caseItem.getSignerList().size();
int startRowIndex = startRow + startIndex;
int endRowIndex = startRow + startIndex + cellNum - 1;
for (int j = 0; j < this.getHeaderArr().length - 1; j++) {
if (cellNum > 1) {
sheet.addMergedRegion(new CellRangeAddress(startRowIndex, endRowIndex, j, j));
}
}
if (cellNum > 1) {
startIndex += (cellNum - 1);
}
}
}
private void excelHeader(XSSFSheet sheet, XSSFCellStyle cellStyle) {
XSSFRow row = sheet.createRow(0);
String[] headerArr = this.getHeaderArr();
for (int i = 0; i < headerArr.length; i++) {
String[] ranges = headerArr[i].split(",");
Integer firstRow = Integer.valueOf(ranges[0]);
Integer lastRow = Integer.valueOf(ranges[1]);
Integer firstCol = Integer.valueOf(ranges[2]);
Integer lastCol = Integer.valueOf(ranges[3]);
String title = ranges[4];
Integer colWidth = Integer.valueOf(ranges[5]);
sheet.setColumnWidth(i, colWidth * 256);
sheet.addMergedRegion(new CellRangeAddress(firstRow, lastRow, firstCol, lastCol));
if (i == 6) {
for (int j = 0; j < this.subjectHeaderArr().length; j++) {
XSSFCell cell = row.createCell(j + 6);
cell.setCellStyle(cellStyle);
}
}
XSSFCell cell = row.createCell(i);
cell.setCellStyle(cellStyle);
cell.setCellValue(title);
}
XSSFRow row1 = sheet.createRow(1);
String[] subjectHeaderArr = this.subjectHeaderArr();
for (int i = 0; i < subjectHeaderArr.length; i++) {
String[] subHeaders = subjectHeaderArr[i].split(",");
String title = subHeaders[0];
Integer colWidth = Integer.valueOf(subHeaders[1]);
sheet.setColumnWidth(i + 6, colWidth * 256);
if (i < 6) {
XSSFCell cellRange = row1.createCell(i);
cellRange.setCellStyle(cellStyle);
}
XSSFCell cell = row1.createCell(i + 6);
cell.setCellStyle(cellStyle);
cell.setCellValue(title);
}
}
private XSSFCellStyle excelHeaderStyle(XSSFWorkbook workbook) {
XSSFCellStyle cellStyle = workbook.createCellStyle();
cellStyle.setAlignment(HorizontalAlignment.CENTER);
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
cellStyle.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex());
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
cellStyle.setAlignment(HorizontalAlignment.CENTER);
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
cellStyle.setBorderBottom(BorderStyle.THIN);
cellStyle.setBorderLeft(BorderStyle.THIN);
cellStyle.setBorderTop(BorderStyle.THIN);
cellStyle.setBorderRight(BorderStyle.THIN);
return cellStyle;
}
private XSSFCellStyle excelBodyStyle(XSSFWorkbook book) {
XSSFCellStyle cellBodyStyle = book.createCellStyle();
cellBodyStyle.setAlignment(HorizontalAlignment.CENTER);
cellBodyStyle.setVerticalAlignment(VerticalAlignment.CENTER);
cellBodyStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
cellBodyStyle.setAlignment(HorizontalAlignment.CENTER);
cellBodyStyle.setVerticalAlignment(VerticalAlignment.CENTER);
cellBodyStyle.setBorderBottom(BorderStyle.THIN);
cellBodyStyle.setBorderLeft(BorderStyle.THIN);
cellBodyStyle.setBorderTop(BorderStyle.THIN);
cellBodyStyle.setBorderRight(BorderStyle.THIN);
cellBodyStyle.setWrapText(true);
return cellBodyStyle;
}
private XSSFFont excelHeaderFont(XSSFWorkbook workbook) {
XSSFFont font = workbook.createFont();
font.setBold(true);
return font;
}
private String[] getHeaderArr() {
return new String [] {
"0,1,0,0,标题1,15",
"0,1,1,1,标题2,35",
"0,1,2,2,标题3,30",
"0,0,6,13,标题4,0"
};
}
private String[] subjectHeaderArr() {
return new String [] {
"标题4-子标题1,15",
"标题4-子标题2,15",
"标题4-子标题3,20"
};
}