easyexcel设置固定列宽

1.引入依赖


            com.alibaba
            easyexcel
            2.2.10


2.设置列宽

public class AuditUnitLevelReportColumnHandler extends AbstractColumnWidthStyleStrategy {

    @Override
    protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List 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的误差值,所以大家需要根据自己的情况来更改这个误差值,不能直接把这个误差值照搬到自己的代码中。

你可能感兴趣的:(easyexcel设置固定列宽)