找回密码
 立即注册
首页 业界区 业界 Easyexcel(5-自定义列宽)

Easyexcel(5-自定义列宽)

钱匾 2025-6-4 21:54:01
注解

@ColumnWidth
  1. @Data
  2. public class WidthAndHeightData {
  3.    
  4.     @ExcelProperty("字符串标题")
  5.     private String string;
  6.    
  7.     @ExcelProperty("日期标题")
  8.     private Date date;
  9.     @ColumnWidth(50)
  10.     @ExcelProperty("数字标题")
  11.     private Double doubleData;
  12. }
复制代码
注解使用时表头长度无法做到动态调整,只能固定设置,每次调整表头长度时只能重新修改代码
注意:@ColumnWidth最大值只能为255,超过255*256长度时会报错
查看XSSFSheet源码
1.jpeg

类方法

2.jpeg

AbstractHeadColumnWidthStyleStrategy

[code]public abstract class AbstractHeadColumnWidthStyleStrategy extends AbstractColumnWidthStyleStrategy {    @Override    protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List> cellDataList, Cell cell,        Head head,        Integer relativeRowIndex, Boolean isHead) {        // 判断 是否为表头 || 导出内容是否为空        boolean needSetWidth = isHead || !CollectionUtils.isEmpty(cellDataList);        if (!needSetWidth) {            return;        }        Map maxColumnWidthMap = cache.computeIfAbsent(writeSheetHolder.getSheetNo(), key -> new HashMap(16));        Integer columnWidth = dataLength(cellDataList, cell, isHead);        if (columnWidth < 0) {            return;        }        // 超过最大值255时则设置为255        if (columnWidth > MAX_COLUMN_WIDTH) {            columnWidth = MAX_COLUMN_WIDTH;        }        // 比较该列的宽度,如果比原来的宽度大,则重新设置        Integer maxColumnWidth = maxColumnWidthMap.get(cell.getColumnIndex());        if (maxColumnWidth == null || columnWidth > maxColumnWidth) {            maxColumnWidthMap.put(cell.getColumnIndex(), columnWidth);            writeSheetHolder.getSheet().setColumnWidth(cell.getColumnIndex(), columnWidth * 256);        }    }    private Integer dataLength(List> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {        if (type == 1) {            if (isHead) {                int columnWidth = cell.getStringCellValue().length();                columnWidth = Math.max(columnWidth * 2, 20);                if (columnWidth > 255) {                    columnWidth = 255;                }                writeSheetHolder.getSheet().setColumnWidth(cell.getColumnIndex(), columnWidth * 256);            }            return;        }        //不把标头计算在内        boolean needSetWidth = isHead || !CollectionUtils.isEmpty(cellDataList);        if (needSetWidth) {            Map maxColumnWidthMap = cache.get(writeSheetHolder.getSheetNo());            if (maxColumnWidthMap == null) {                maxColumnWidthMap = new HashMap();                cache.put(writeSheetHolder.getSheetNo(), maxColumnWidthMap);            }            Integer columnWidth = this.dataLength(cellDataList, cell, isHead);            if (columnWidth >= 0) {                if (columnWidth > 255) {                    columnWidth = 255;                }                Integer maxColumnWidth = maxColumnWidthMap.get(cell.getColumnIndex());                if (maxColumnWidth == null || columnWidth > maxColumnWidth) {                    maxColumnWidthMap.put(cell.getColumnIndex(), columnWidth);                    writeSheetHolder.getSheet().setColumnWidth(cell.getColumnIndex(), columnWidth * 256);                }            }        }    }    /**     * 数据长度     *     * @param cellDataList     * @param cell     * @param isHead     * @return     */    private Integer dataLength(List

相关推荐

您需要登录后才可以回帖 登录 | 立即注册