EasyExcel Best Practise
refer to : https://easyexcel.opensource.alibaba.com/docs/current/
通过ColumnWidthStyleStrategy,设置列宽
package com.jshxhb.module.detectcontrol.biz.service;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.style.column.AbstractHeadColumnWidthStyleStrategy;
public class DetectIndexHisdataColumnWidthStyleStrategy extends AbstractHeadColumnWidthStyleStrategy {
@Override
protected Integer columnWidth(Head head, Integer columnIndex) {
if (columnIndex == 0) {
return 30;
}else {
return 20;
}
}
}
接下来,通过registerWriteHandler的方式,将上面自定义的ColumnWidthStyleStrategy,注册进来,启用这个ColumnWidthStyleStrategy
DetectIndexHisdataColumnWidthStyleStrategy columnWidthStyleStrategy = new DetectIndexHisdataColumnWidthStyleStrategy();
try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).head(headList)
.registerWriteHandler(horizontalCellStyleStrategy)
.registerWriteHandler(columnWidthStyleStrategy).build()) {
//....
...
}
通过CellStyleStrategy,设置单元格的格式为文本,并且居中
private HorizontalCellStyleStrategy getHorizontalCellStyleStrategy() {
WriteCellStyle headWriteCellStyle = new WriteCellStyle();
WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
DataFormatData dataFormatData = new DataFormatData();
dataFormatData.setIndex((short) 49); // com.alibaba.excel.constant.BuiltinFormats
contentWriteCellStyle.setDataFormatData(dataFormatData);
HorizontalCellStyleStrategy horizontalCellStyleStrategy =
new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
return horizontalCellStyleStrategy;
}
接下来,通过registerWriteHandler的方式,将上面HorizontalCellStyleStrategy,注册进来,启用这个CellStyleStrategy
HorizontalCellStyleStrategy horizontalCellStyleStrategy = getHorizontalCellStyleStrategy();
DetectIndexHisdataColumnWidthStyleStrategy columnWidthStyleStrategy = new DetectIndexHisdataColumnWidthStyleStrategy();
try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).head(headList)
.registerWriteHandler(horizontalCellStyleStrategy)
.registerWriteHandler(columnWidthStyleStrategy).build()) {
//....
...
}
上面有一段代码:
WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
DataFormatData dataFormatData = new DataFormatData();
dataFormatData.setIndex((short) 49); // com.alibaba.excel.constant.BuiltinFormats
contentWriteCellStyle.setDataFormatData(dataFormatData);
DataFormatData类,是干什么用的呢?
其实,就是描述,这个单元格,记录的是文本、还是数字、或者日期、或者是其他的等等,
如下面excel展示的:
其中49
,表示的就是文本,这个是来自于com.alibaba.excel.constant.BuiltinFormats
类中的描述