Skip to content

Excel 模块

excel 导出导出基于fesod,根据系统情况做了工具和注解的封装,详细用法请参考官方文档

工具类

fesod提供更节省内存的导入导出方法,请根据自身业务需要自行实现

export(导出)

java
ExcelUtils.export(list, UserExportVO.class);
  • 参数:exportData - 导出数据集合,clazz - 导出数据类型
  • 返回值:无(直接写入HTTP响应流)
  • 说明:将数据导出为Excel文件并写入HTTP响应流

export(合并单元格导出)

java
ExcelUtils.export(list, UserExportVO.class, new CustomMergeStrategy());
  • 参数:exportData - 导出数据集合,clazz - 导出数据类型,mergeStrategy - 单元格合并策略
  • 返回值:无(直接写入HTTP响应流)
  • 说明:支持自定义单元格合并策略,同时自动识别注解实现下拉框和批注功能

excelImport(导入)

java
List<UserImportVO> list = ExcelUtils.excelImport(inputStream, UserImportVO.class);
  • 参数:inputStream - Excel文件输入流,clazz - 解析的数据类型
  • 返回值:List<T> 解析后的数据集合
  • 说明:从Excel文件中读取数据并转换为指定类型对象集合

批注

使用注解指定批注信息

@ExcelComment(指定批注)

@ExcelComment(value = "用户名必填且系统唯一")
private String username;
  • 参数:value - 批注内容,use - 批注应用位置(全部/表头/内容),headRowNum - 表头行号(多级表头使用)
  • 说明:用于Excel导出时为单元格添加批注,支持作用范围控制及多级表头位置指定

@ExcelEnableComment(是否启用批注)

@ExcelEnableComment
public class SysUser extends BaseEntity{}
  • 参数:无
  • 说明:在实体类上标记,标记后该类的对应字段 @ExcelComment 将被应用

单元格下拉

使用注解指定单元格下拉信息

@ExcelDropdown(设置下拉)

@ExcelDropdown(type = DropdownTypeEnum.DICT, value = "user_gender")
private String gender;
  • 参数:type - 下拉类型(见DropdownTypeEnum),value - 下拉标识(如字典编码),options - 自定义下拉数据,max - 生效最大行数
  • 说明:用于Excel导出时为单元格添加下拉选项,支持字典下拉和自定义下拉两种方式

@ExcelEnableDropdown(是否启用单元格下拉)

@ExcelEnableDropdown
public class SysUser extends BaseEntity{}
  • 参数:无
  • 说明:在实体类上标记,标记后该类的对应字段 @ExcelDropdown 将被应用

字典翻译

字典翻译需要用到fesod 官方注解 @ExcelProperty 指定转换器 converterExcelDictConverter.class

另外需要自定义注解 @ExcelDictType() 传入字典类型编码,两个注解配合完成字典翻译

@ExcelProperty(value = "状态", converter = ExcelDictConverter.class)
@ExcelDictType("sys_status")
private String status;

字典翻译逻辑在 ExcelDictConverter 自定义转换器中

日期转换器

项目中还提供了 LocalDateTimeLocalDate 转换器,配合 @ExcelProperty 注解,导出时间|日期数据时使用。

/**
 * 创建时间(操作时间)
 */
@ExcelProperty(value = "操作时间", converter = ExcelLocalDateTimeConverter.class)
private LocalDateTime createTime;

异常

提供Excel导入异常 ExcelImportException 导入时遇到逻辑问题可抛出此异常。

public class ExcelImportException extends BaseException {

    public ExcelImportException(String message) {
        super(ResultCodeEnum.EXCEL_IMPORT_ERROR, JsonUtils.toJson(Collections.singletonList(message)));
    }

    public ExcelImportException(List<String> errMessages) {
        super(ResultCodeEnum.EXCEL_IMPORT_ERROR, JsonUtils.toJson(errMessages));
    }
}

合并单元格

一般合并单元格需要根据业务数据实现,无法做成通用注解。可参考 UserMergeStrategy 进行开发。

使用时调用 ExcelUtils.export() 方法,第二个参数传入自定义合并策略。

public void exportExcel(@RequestBody SysUserDTO sysUserDTO) {
    List<SysUserVO> sysUserVOS = sysUserService.exportExcel(sysUserDTO);
    ExcelUtils.export(sysUserVOS, SysUserVO.class, new UserMergeStrategy(sysUserVOS.size()));
}