Skip to content

[Enhancement] FastExcel 导出增加 表头冻结注解(冻结首行 / 首列) #913

@bin2100166581

Description

@bin2100166581

Search before asking

  • I searched in the issues and found nothing similar.

Motivation

一、需求背景

目前项目中大量使用 FastExcel 进行 Excel 导入导出,用户反馈滚动时表头会滑出视野,查看长列表数据非常不便。

希望在 VO 实体类上通过注解 即可实现导出时自动冻结表头(首行固定在顶部),无需手动调用 freezePane,统一规范、降低使用成本。

二、需求目标

  1. 支持通过注解开启 Excel 冻结窗格
  2. 支持冻结首行(最常用)、冻结首列、同时冻结首行 + 首列
  3. 兼容现有 @ExcelProperty、下拉框、自动列宽、合并单元格等功能
  4. 对原有代码无侵入,不影响现有导出逻辑

三、功能设计(建议)

1. 新增注解:@ExcelFreezePane

/**
 * Excel 冻结窗格注解(导出时生效)
 */
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface ExcelFreezePane {

    /**
     * 冻结行数(默认 1 行,即冻结表头)
     */
    int row() default 1;

    /**
     * 冻结列数(默认 0 列)
     */
    int column() default 0;

}

2. 使用方式(VO 上加一行即可)

@Data
@ExcelIgnoreUnannotated
@ExcelFreezePane // 冻结首行(默认)
public class SzbcpmMigrantWorkerImportVo implements Serializable {
    // ... 字段
}

3. 扩展用法

// 冻结首行 + 首列
@ExcelFreezePane(row = 1, column = 1)

// 冻结前2行
@ExcelFreezePane(row = 2)

四、实现逻辑(建议)

  1. ExcelUtilFastExcel 构建阶段读取 VO 类上的 @ExcelFreezePane 注解

  2. 如果存在注解,则自动调用:

    builder.freezePane(column, row);
    
  3. 无注解则保持原有逻辑,不冻结

五、业务价值

  1. 所有导出模板自动固定表头,用户体验大幅提升
  2. 统一规范,避免每个导出都要手动加 freezePane
  3. 零代码侵入,业务 VO 只加一个注解即可
  4. 适配考勤、工资、人员导入导出等长表格高频场景

六、优先级

中高(影响大量导入导出体验)

七、影响范围

  • 仅影响 FastExcel 导出
  • 不影响原有功能
  • 无兼容性风险

Solution

No response

Alternatives

No response

Anything else?

No response

Are you willing to submit a PR?

  • I'm willing to submit a PR!

Metadata

Metadata

Labels

enhancementNew feature or request

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions