美文网首页
easyexcel设置固定列宽

easyexcel设置固定列宽

作者: CXY_XZL | 来源:发表于2022-08-03 17:02 被阅读0次

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

    相关文章

      网友评论

          本文标题:easyexcel设置固定列宽

          本文链接:https://www.haomeiwen.com/subject/xmfewrtx.html