钱匾 发表于 2025-6-4 21:54:01

Easyexcel(5-自定义列宽)

注解

@ColumnWidth

@Data
public class WidthAndHeightData {
   
    @ExcelProperty("字符串标题")
    private String string;
   
    @ExcelProperty("日期标题")
    private Date date;

    @ColumnWidth(50)
    @ExcelProperty("数字标题")
    private Double doubleData;
}注解使用时表头长度无法做到动态调整,只能固定设置,每次调整表头长度时只能重新修改代码
注意:@ColumnWidth最大值只能为255,超过255*256长度时会报错
查看XSSFSheet源码

类方法


AbstractHeadColumnWidthStyleStrategy

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
页: [1]
查看完整版本: Easyexcel(5-自定义列宽)