看了网上搜索到的大部分实现方式都是需要自己写方法类,计算配置各行的独立行高,使用发现存在准确性及行内多单元格内容无法自适应的问题。
很简单,不需要想的复杂。只需要配置单元格样式策略,将【自动换行:true】打开。
主要代码:contentWriteCellStyle.setWrapped(true);
{
// 生成excel文件
EasyExcel.write(saveWordFilePath, DirectoryPrint2BO.class)
.withTemplate(excelFileTemplate)
.needHead(false)
// 单元格样式策略
.registerWriteHandler(this.getHorizontalCellStyleStrategy((short) 12))
.sheet("Sheet1")
.doWrite(directoryPrint2BoList);
}
/**
* 单元格样式策略
*/
public static HorizontalCellStyleStrategy getHorizontalCellStyleStrategy(Short fontHeightInPoints) {
// 内容的策略
WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
// 设置边框
contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);
contentWriteCellStyle.setBorderLeft(BorderStyle.THIN);
contentWriteCellStyle.setBorderRight(BorderStyle.THIN);
contentWriteCellStyle.setBorderTop(BorderStyle.NONE);
// 配置字体
WriteFont contentWriteFont = new WriteFont();
// 字体
contentWriteFont.setFontName("宋体");
// 字体大小
contentWriteFont.setFontHeightInPoints(fontHeightInPoints);
// 设置加粗
contentWriteFont.setBold(false);
contentWriteCellStyle.setWriteFont(contentWriteFont);
// 【水平居中需要使用以下两行】
// 设置文字左右居中
contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
// 设置文字上下居中
contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
// 设置 自动换行
contentWriteCellStyle.setWrapped(true);
// 样式策略
return new HorizontalCellStyleStrategy(null, contentWriteCellStyle);
}
注意:
配置了单元格样式策略以后,就不要再用到其他方式改变行高了,如果写死或者用了网上其他的改变行高的方式,测试该方法就会失效。
如上图,生成文件各个单元格会将【自动换行】打开。如果用其他方式改变了行高,该按钮也会是打开状态但自动换行不会生效。
如果只涉及部分行自动换行的话,需要补充逻辑只为需要自动换行的单元格配置属性,具体没有实现,理论上是完全可以的。