有时候,excel文件中,需要合并单元格,导出的时候应该怎么实现呢?
有两种实现方式,一种是策略形式,一种是注解形式.注解形式比较方便,策略形式可操作性更强,更灵活.
1.策略形式
public void exportHeadersMerge(String path) {
String sheetName = "sheetName";
List<ExportHeadersExcel> excels = new ArrayList<>();
ExportHeadersExcel exportHeadersExcel = new ExportHeadersExcel();
exportHeadersExcel.setShui("一元重水");
excels.add(exportHeadersExcel);
ExportHeadersExcel exportHeadersExcel1 = new ExportHeadersExcel();
exportHeadersExcel1.setShui("玄冥真水");
excels.add(exportHeadersExcel1);
ExportHeadersExcel exportHeadersExcel2 = new ExportHeadersExcel();
exportHeadersExcel2.setShui("天一真水");
excels.add(exportHeadersExcel2);
ExportHeadersExcel exportHeadersExcel3 = new ExportHeadersExcel();
exportHeadersExcel3.setShui("无形真水");
excels.add(exportHeadersExcel3);
//自定义策略
//参数 int eachRow, int columnExtend, int columnIndex
//eachRow 2 代表每两行就合并,每一行都执行,如果不够两行,要合并的这一列会没有下方的边框
//columnExtend 合并扩展列, 向右合并列
// columnIndex 列索引,从零开始,第columnIndex列开始执行合并,往右合并columnExtend列
LoopMergeStrategy loopMergeStrategy = new LoopMergeStrategy(2, 0);
//注解形式 @ContentLoopMerge(eachRow = 2)
EasyExcel.write(path, ExportHeadersExcel.class)
.registerWriteHandler(loopMergeStrategy)
.sheet(sheetName)
.doWrite(excels);
}
效果

LoopMergeStrategy的参数释义:
//eachRow 2 代表每两行就合并,每一行都执行,如果不够两行,要合并的这一列会没有下方的边框 //columnExtend 合并扩展列, 向右合并列
// columnIndex 列索引,从零开始,第columnIndex列开始执行合并,往右合并columnExtend列
2.注解形式
实体类
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ContentLoopMerge;
import com.alibaba.excel.annotation.write.style.ContentStyle;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import com.alibaba.excel.enums.BooleanEnum;
import com.alibaba.excel.enums.poi.BorderStyleEnum;
import com.alibaba.excel.enums.poi.VerticalAlignmentEnum;
import lombok.Data;
@Data
@HeadRowHeight(30)
//属性注释在最下
@ContentStyle(wrapped = BooleanEnum.TRUE, verticalAlignment = VerticalAlignmentEnum.CENTER, borderBottom = BorderStyleEnum.THIN, borderLeft = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN)
public class ExportHeadersExcel {
/**
* 金
*/
@ExcelProperty(value = {"七灵图","五行", "金"})
//合并单元格
@ContentLoopMerge(eachRow = 2)
private String jin;
/**
* 木
*/
@ExcelProperty(value = {"七灵图","五行", "木"})
private String mu;
/**
* 水
*/
@ExcelProperty(value = {"七灵图","五行", "水"})
private String shui;
/**
* 火
*/
@ExcelProperty(value = {"七灵图","五行", "火"})
private String huo;
/**
* 土
*/
@ExcelProperty(value = {"七灵图","五行", "土"})
private String tu;
/**
* 阴
*/
@ExcelProperty(value = {"七灵图","两仪", "阴"})
private String yin;
/**
* 阳
*/
@ContentLoopMerge(eachRow = 2)
@ExcelProperty(value = {"七灵图","两仪", "阳"})
private String yang;
}
代码
public void exportHeadersMerge(String path) {
String sheetName = "sheetName";
List<ExportHeadersExcel> excels = new ArrayList<>();
ExportHeadersExcel exportHeadersExcel = new ExportHeadersExcel();
exportHeadersExcel.setShui("一元重水");
excels.add(exportHeadersExcel);
ExportHeadersExcel exportHeadersExcel1 = new ExportHeadersExcel();
exportHeadersExcel1.setShui("玄冥真水");
excels.add(exportHeadersExcel1);
ExportHeadersExcel exportHeadersExcel2 = new ExportHeadersExcel();
exportHeadersExcel2.setShui("天一真水");
excels.add(exportHeadersExcel2);
ExportHeadersExcel exportHeadersExcel3 = new ExportHeadersExcel();
exportHeadersExcel3.setShui("无形真水");
excels.add(exportHeadersExcel3);
EasyExcel.write(path, ExportHeadersExcel.class)
.sheet(sheetName)
.doWrite(excels);
}
效果

注解直接写在实体类的字段上就可以.
注解形式可以设定某一列进行合并,实体类上对金和阳两个字段加了注解,所以这两列进行了合并.策略形式不知道怎么设置某一列,知道的大佬在评论回复一下具体操作,万分感谢!
git仓库:导入导出: 导入导出的实例
更多导出场景:多场景easyExcel导出excel文件(一)-CSDN博客
读取excel场景:多场景easyExcel读取excel文件(二)-CSDN博客
根据模板填充excel:多场景easyExcel根据模板填充excel文件(三)-CSDN博客

1万+

被折叠的 条评论
为什么被折叠?



