封装Excel导入导出通用模块,核心是分离数据、样式与输出:业务代码仅传List和类,注解驱动列映射与格式控制;多sheet支持Map结构;分层解耦数据处理、样式工厂与响应封装;提供监听器、动态样式、大数据流式写入及标准化导入流程。

封装 Excel 导入导出通用模块,核心是把“填什么数据”“长什么样式”“怎么传给前端”三件事彻底分开,让业务代码只管传 List 和类,其余全由组件兜底。
统一入口 + 注解驱动
用 @ExcelProperty 标记实体字段,自动映射列名、顺序和格式;支持 @DateTimeFormat、@ColumnWidth、@ExcelIgnore 等注解控制细节。工具类通过反射读取这些元信息,无需硬编码列索引或手动拼表头。
- 导出时:传入
List<User>和User.class,自动按注解生成表头与内容 - 导入时:EasyExcel 自动将 Excel 行转为对应对象,空值、类型转换、日期解析均由框架处理
- 多 sheet 场景:接收
Map<String, List<?>>,key 作 sheet 名,内部遍历写入
分层解耦:数据 / 样式 / 输出
不把所有逻辑揉进一个方法。数据层做字段映射与预处理(如空值跳过、千分位、日期格式化);样式层封装 titleStyle、headerStyle、contentStyle 三类工厂方法,返回已配置完整的 CellStyle;输出层统一封装响应头、编码、流关闭和异常降级逻辑。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 避免每次 new CellStyle() 漏设属性,用
StyleFactory.createHeaderStyle()直接复用 - 响应头自动处理中文文件名:用
URLEncoder.encode(fileName, "UTF-8")并替换空格 - 流异常时重置 response,返回 JSON 错误提示,防止浏览器下载乱码文件
容错扩展点预留
复杂报表常需动态干预,比如某列加超链接、某行标红、末尾插入合计行。通用模块应提供:
立即学习“Java免费学习笔记(深入)”;
-
writeBeforeListener/writeAfterListener:在写入前/后执行自定义逻辑 -
ICellStyleProvider接口:支持按行或按列动态返回样式,而非全局一套 - 大数据量默认启用
SXSSFWorkbook,并暴露flushRows参数可控内存占用 - 合并单元格支持坐标描述(如
"A1:C1")或注解@Merge({0,0,0,2})
导入流程标准化
通用导入方法接受校验函数、转换函数、保存函数三个回调,实现“读→校验→转实体→存库”全流程可插拔:
- 读取后逐行调用
validateFunction,收集错误信息并定位到具体行号 - 用
convertFunction将 DTO 映射为业务实体,解耦数据传输与领域模型 - 校验失败时返回结构化错误列表,含行号和原因,前端可高亮显示
- 支持
MultipartFile或输入流,适配 Web 层与定时任务等不同调用场景

















