1.引入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.10</version>
</dependency>
2.设置列宽
public class AuditUnitLevelReportColumnHandler extends AbstractColumnWidthStyleStrategy {
@Override
protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List<CellData> cellDataList, Cell cell, Head head, Integer integer, Boolean isHead) {
boolean needSetWidth = isHead || !CollectionUtils.isEmpty(cellDataList);
if (needSetWidth) {
Sheet sheet = writeSheetHolder.getSheet();
int columnIndex = cell.getColumnIndex();
if (columnIndex == 1){
//要求将当前列的列宽设置为33英寸,理论值应该是33×256=8448,
//但是这里的设值是8648,具体原因请看下面的计算逻辑
sheet.setColumnWidth(1,8648);
}else if (columnIndex == 2){
sheet.setColumnWidth(2,5576);
}else {
sheet.setColumnWidth(columnIndex,3016);
}
}
}
}
setColumnWidth(i,j)函数中,i是列的下标,从0开始,j是列的宽度,单位是1/256个字符宽度,所以代码中要乘以256,两个参数都必须是整数
列宽计算逻辑:以下标为1的列的宽度计算逻辑说明下,正常情况下设置的列宽是33乘以256,但实际上我们生成的excel中列宽是32.22,因为字体样式、大小以及单元格边框等占用额外的像素,所以实际的列宽比代码中设置的列宽要小0.78英寸(excel中的列宽单位是英寸),代码中设置的33也是英寸单位,那么实际我们需要设置成33.78英寸,但33.78乘以256是Double类型的数值,setColumnWidth的第二个参数必须是整数,所以在33.78*256=8647.68的基础上向上取整为8648
也需要注意的是:我用的是office365版本的excel,而不同版本的excel以及字体、单元格边框设置等因素都会影响到excel最终的列宽,可能不是上面提到的0.78的误差值,所以大家需要根据自己的情况来更改这个误差值,不能直接把这个误差值照搬到自己的代码中。
网友评论