前言
最近做项目需要做导出,导出使用EasyExcel这个工具,快捷实现功能。简单的导出表,使用注解的方式完全满足需求,但是如果是动态头,实时生成头写入的方式,就不能使用注解的方式去设置列宽行高,所以我们需要会用非注解方式设置列宽行高。
代码
第一种:直接使用简单的列宽行高的style策略
简单的列宽策略,列宽20 :new SimpleColumnWidthStyleStrategy(20))
简单的行高策略:头行高30,内容行高20 :new SimpleRowHeightStyleStrategy((short)30,(short)20))
EasyExcel.write(outputStream)
// 这里放入动态头
.head(headNameList)
// java以点分割要转义符
.sheet(fileName.split("\\.")[0])
// 注册策略
.registerWriteHandler(new SimpleColumnWidthStyleStrategy(20)) // 简单的列宽策略,列宽20
.registerWriteHandler(new SimpleRowHeightStyleStrategy((short)30,(short)20)) // 简单的行高策略:头行高30,内容行高20
.doWrite(datalist);
第二种:继承抽象的style策略AbstractColumnWidthStyleStrategy,然后实现setColumnWidth方法来设置列宽行高
EasyExcel.write(outputStream)
// 这里放入动态头
.head(headNameList)
// java以点分割要转义符
.sheet(fileName.split("\\.")[0])
// 重写AbstractColumnWidthStyleStrategy策略的setColumnWidth方法
.registerWriteHandler(new AbstractColumnWidthStyleStrategy() {
@Override
protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List<CellData> list, Cell cell, Head head, Integer integer, Boolean aBoolean) {
Sheet sheet = writeSheetHolder.getSheet();
int columnIndex = cell.getColumnIndex();
// 列宽40
sheet.setColumnWidth(columnIndex, 4000);
// 行高7
sheet.setDefaultRowHeight((short) 700);
}
})
.doWrite(datalist);