解决方式一(亲测有效)
在SheetWriteHandler的实现方法中,在afterSheetCreate方法中创建表格之前加入表格的格式,即可实现具体代码如下:
public class CustomSheetWriteHandler implements SheetWriteHandler {
@Override
public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {}
@Override
public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
//100列
for (int i = 0; i < 100; i++) {
// 设置为文本格式
SXSSFSheet sxssfSheet = (SXSSFSheet) writeSheetHolder.getSheet();
CellStyle cellStyle = writeWorkbookHolder.getCachedWorkbook().createCellStyle();
// 49为文本格式
cellStyle.setDataFormat((short) 49);
// i为列,一整列设置为文本格式
sxssfSheet.setDefaultColumnStyle(i, cellStyle);
}
}
}
二、设置含有数据的单元格的格式为文本
如果只是完成上面第一步,会发现导出的模板中,含有数据的单元格的格式还是常规,当重新输入后,日期又自适应,变成不是文本字符串了,所以我这里还是设置了含有数据的单元格的格式为文本只需要在导出模板的实体类的字段上加上注解即可:@ContentStyle(dataFormat = 49)
@Data
public class ExpenseTemplateModel {
/**
* 所属年月
*/
@HeadFontStyle(color= 10)
@ExcelProperty(value = "所属年月")
@ContentStyle(dataFormat = 49)
private String expenseMonth;
/**
* 会计主体
*/
@HeadFontStyle(color= 10)
@ExcelProperty(value = "会计主体")
@ContentStyle(dataFormat = 49)
private String borrowerName;
}
最后在使用的时候不要忘了注册改样式,可参考以下代码注册
EasyExcel.write(filePath).head(head(list)).sheet("模板")
.registerWriteHandler(new CustomSheetWriteHandler())
.registerWriteHandler(new CustomCellWriteHandler()).doWrite(new ArrayList<>(0));
实现效果
可以看到一整列都修改为了文本格式,具体如下图: