POI合并单元格
public void writeTableDataWithMergeCell(PoiTableHeader header,List<?> dataList){
HSSFCellStyle cellStyle=(HSSFCellStyle)header.getWorkbook().createCellStyle();
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
int mergeCellsBegin = 1;
int mergeCellsEnd = 1;
int mergeCellCols=9;
int startRow=header.getMaxRowSpan();
List<FieldColumn> fieldColumns = header.getFieldColumns();
int colsSize = fieldColumns.size();
String tempVar ="";
String preTempVar ="";
for(int i=0;i<dataList.size();i++){
preTempVar = tempVar;
tempVar = "";
Object obj=dataList.get(i);
Row row=header.getSheet().createRow(startRow+i);
for(int j=0;j< colsSize; j++){
FieldColumn fieldColumn= fieldColumns.get(j);
Cell cell=row.createCell(j);
String field=fieldColumn.getField();
Object val =BeanUtil.getFieldValueFromObject(obj, field);
if(val!=null){
if (j < mergeCellCols){
tempVar += val.toString();
}
cell.setCellValue(val.toString());
}
cell.setCellStyle(cellStyle);
}
if (!tempVar.equals(preTempVar)){
if (mergeCellsEnd>mergeCellsBegin){
System.err.println("合并"+mergeCellsBegin+","+mergeCellsEnd);
merge(header,mergeCellsBegin,mergeCellsEnd,mergeCellCols);
}
mergeCellsBegin = startRow+i;
mergeCellsEnd = startRow+i;
}
if (tempVar.equals(preTempVar)){
for (int n=0;n<mergeCellCols;n++){
row.getCell(n).setCellType(CELL_TYPE_BLANK );
}
mergeCellsEnd = startRow+i;
}
System.err.println("B:"+mergeCellsBegin+" E:"+mergeCellsEnd);
}
}
private void merge(PoiTableHeader header, int mergeCellsBegin, int mergeCellsEnd, int mergeCellCols) {
for (int j = 0; j < mergeCellCols; j++) {
CellRangeAddress region = new CellRangeAddress(mergeCellsBegin, mergeCellsEnd, j, j);
header.getSheet().addMergedRegion(region);
}
}