在做一个业务的导出,目前遇到一个需求,如下图:
importcom.alibaba.excel.metadata.CellData;
importcom.alibaba.excel.metadata.Head;
importcom.alibaba.excel.write.handler.CellWriteHandler;
importcom.alibaba.excel.write.metadata.holder.WriteSheetHolder;
importcom.alibaba.excel.write.metadata.holder.WriteTableHolder;
importlombok.Data;
importorg.apache.poi.ss.usermodel.*;
importorg.apache.poi.ss.util.CellRangeAddress;
importjava.util.List;
/**
*单元格合并策略类
*
*/
@Data
publicclassExcelFillCellMergeStrategyimplementsCellWriteHandler{
/**
*哪几列的字段需要合并
*/
privateint[]mergeColumnIndex;
/**
*从第几行开始合并
*/
privateintmergeRowIndex;
publicExcelFillCellMergeStrategy(){
}
publicExcelFillCellMergeStrategy(intmergeRowIndex,int[]mergeColumnIndex){
this.mergeRowIndex=mergeRowIndex;
this.mergeColumnIndex=mergeColumnIndex;
}
@Override
publicvoidbeforeCellCreate(WriteSheetHolderwriteSheetHolder,WriteTableHolderwriteTableHolder,Rowrow,
Headhead,Integerinteger,Integerinteger1,BooleanaBoolean){
}
@Override
publicvoidafterCellCreate(WriteSheetHolderwriteSheetHolder,WriteTableHolderwriteTableHolder,Cellcell,
Headhead,Integerinteger,BooleanaBoolean){
Workbookworkbook=writeSheetHolder.getSheet().getWorkbook();
CellStylecellStyle=workbook.createCellStyle();
FontcellFont=workbook.createFont();
//加粗
cellFont.setBold(true);
//字体大小
cellFont.setFontHeightInPoints((short)12);
//居中
cellStyle.setAlignment(HorizontalAlignment.CENTER);
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
cellStyle.setFont(cellFont);
cell.setCellStyle(cellStyle);
//设置自动换行
cellStyle.setWrapText(true);
}
@Override
publicvoidafterCellDataConverted(WriteSheetHolderwriteSheetHolder,WriteTableHolderwriteTableHolder,
CellDatacellData,Cellcell,Headhead,Integerinteger,BooleanaBoolean){
}
@Override
publicvoidafterCellDispose(WriteSheetHolderwriteSheetHolder,WriteTableHolderwriteTableHolder,
Listlist,Cellcell,Headhead,Integerinteger,BooleanaBoolean){
//当前行
intcurRowIndex=cell.getRowIndex();
//当前列
intcurColIndex=cell.getColumnIndex();
if(curRowIndex>mergeRowIndex){
for(inti=0;imergeRegions=sheet.getMergedRegions();
booleanisMerged=false;
for(inti=0;i -->
|