关于EasyExcel 合并单元格方法该如何实现

[复制链接]
查看11 | 回复4 | 2021-1-27 05:07:32 | 显示全部楼层 |阅读模式
在做一个业务的导出,目前遇到一个需求,如下图:


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 -->
回复

使用道具 举报

千问 | 2021-1-27 05:07:32 | 显示全部楼层
补充一点:真实环境可能表格合并数据形式没有这么极端(毕竟每个条款对应的审核部门大部分不相同以及分值也不相同),但如果用这个合并方法肯定会有这种情况
回复

使用道具 举报

千问 | 2021-1-27 05:07:32 | 显示全部楼层
顶一下顶一下顶一下
回复

使用道具 举报

千问 | 2021-1-27 05:07:32 | 显示全部楼层
顶一下顶一下顶一下
回复

使用道具 举报

千问 | 2021-1-27 05:07:32 | 显示全部楼层
//比较当前行的第一列的单元格与上一行是否相同,相同合并当前单元格与上一行
增加判断条件分解任务相同再进行后面的操作
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行