# claw **Repository Path**: wangxzhen/claw ## Basic Information - **Project Name**: claw - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-09 - **Last Updated**: 2026-06-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README \ # easyexcel-spring-boot-starter EasyExcel 的 Spring Boot Starter 封装,开箱即用,支持配置化样式和颜色定制。 ## 特性 - ✅ 开箱即用的 Spring Boot Starter,引入即可使用 - ✅ YAML 配置化样式(表头颜色、字体、对齐、边框等) - ✅ 注解驱动的逐列颜色控制 - ✅ 斑马纹支持(奇偶行不同背景色) - ✅ **多 Sheet 同时导出**(每个 Sheet 独立类型、独立样式) - ✅ **多 Sheet 同时导入**(按名称/序号/全部读取) - ✅ 自动列宽、冻结首行、自动过滤 - ✅ 非HTTP场景导出(直接输出到 OutputStream) ## 快速开始 ### 1. 引入依赖 ```xml com.claw easyexcel-spring-boot-starter 1.0.0 ``` ### 2. 配置(可选,均有默认值) ```yaml claw: excel: row-height: 20 column-width: 20 header-row-height: 25 auto-column-width: true freeze-first-row: true auto-filter: true default-sheet-name: "Sheet1" date-format: "yyyy-MM-dd" date-time-format: "yyyy-MM-dd HH:mm:ss" style: header: font-name: "微软雅黑" font-size: 12 font-color: "FFFFFF" bold: true background-color: "4472C4" # 蓝色表头 horizontal-alignment: "CENTER" vertical-alignment: "CENTER" wrap-text: true border-style: "THIN" border-color: "B4C6E7" content: font-name: "微软雅黑" font-size: 11 font-color: "000000" bold: false background-color: "" odd-row-background-color: "D9E2F3" # 斑马纹奇数行浅蓝 even-row-background-color: "" # 偶数行无背景 horizontal-alignment: "CENTER" vertical-alignment: "CENTER" wrap-text: false border-style: "THIN" border-color: "B4C6E7" ``` ### 3. 定义导出 DTO ```java @ExcelSheet(name = "用户列表", headerBgColor = "1F4E79") public class UserExportDTO { @ExcelColumn(name = "序号", order = 1, width = 8) private Integer id; @ExcelColumn(name = "姓名", order = 2, width = 15, headerBgColor = "C00000") private String name; @ExcelColumn(name = "邮箱", order = 3, width = 30, contentFontColor = "0070C0") private String email; @ExcelColumn(name = "年龄", order = 4, width = 10) private Integer age; @ExcelColumn(name = "创建时间", order = 5, width = 22, dateFormat = "yyyy-MM-dd HH:mm:ss") private Date createTime; // getter/setter ... } @ExcelSheet(name = "部门列表") public class DeptExportDTO { @ExcelColumn(name = "部门ID", order = 1, width = 10) private Integer deptId; @ExcelColumn(name = "部门名称", order = 2, width = 20) private String deptName; @ExcelColumn(name = "负责人", order = 3, width = 15) private String leader; // getter/setter ... } ``` ### 4. 单 Sheet 导出 ```java @RestController @RequestMapping("/api/excel") public class ExcelController { @Autowired private ExcelService excelService; @GetMapping("/export/users") public void exportUsers(HttpServletResponse response) { List dataList = getUserList(); excelService.export(response, "用户列表", UserExportDTO.class, dataList); } } ``` ### 5. 多 Sheet 同时导出 ⭐ ```java @GetMapping("/export/multi") public void exportMulti(HttpServletResponse response) { List sheets = Arrays.asList( ExcelService.SheetConfig.of("用户", UserExportDTO.class, getUserList()), ExcelService.SheetConfig.of("部门", DeptExportDTO.class, getDeptList()), ExcelService.SheetConfig.of("订单", OrderExportDTO.class, getOrderList()) ); excelService.exportMultiSheet(response, "综合报表", sheets); } ``` > 每个 Sheet 可以使用**不同的 DTO 类型**,各自拥有独立的样式、颜色和列定义。 ### 6. 非 HTTP 场景导出 ```java // 导出到文件 try (OutputStream out = new FileOutputStream("report.xlsx")) { excelService.export(out, "用户", UserExportDTO.class, dataList); } // 多 Sheet 导出到文件 try (OutputStream out = new FileOutputStream("report.xlsx")) { excelService.exportMultiSheet(out, sheets); } ``` ### 7. 单 Sheet 导入 ```java @PostMapping("/import/users") public List importUsers(@RequestParam("file") MultipartFile file) throws IOException { return excelService.read(UserExportDTO.class, file.getInputStream()); } ``` ### 8. 多 Sheet 同时导入 ⭐ ```java @PostMapping("/import/multi") public Map> importMulti(@RequestParam("file") MultipartFile file) throws IOException { List configs = Arrays.asList( ExcelService.SheetReadConfig.byName("用户", UserExportDTO.class), ExcelService.SheetReadConfig.byNo(1, DeptExportDTO.class) ); Map> result = excelService.readMultiSheet(file.getInputStream(), configs); // result.get("用户") -> List // result.get("Sheet1") -> List return result; } ``` ### 9. 读取所有 Sheet ```java @PostMapping("/import/all") public Map> importAll(@RequestParam("file") MultipartFile file) throws IOException { return excelService.readAllSheets(file.getInputStream(), UserExportDTO.class); } ``` ## API 速查 ### 导出 | 方法 | 说明 | |------|------| | `export(response, fileName, dataClass, dataList)` | 单 Sheet 导出 | | `export(response, fileName, sheetName, dataClass, dataList)` | 单 Sheet + 自定义名称 | | `export(outputStream, sheetName, dataClass, dataList)` | 非 HTTP 单 Sheet 导出 | | `exportMultiSheet(response, fileName, sheetConfigs)` | **多 Sheet 同时导出** | | `exportMultiSheet(outputStream, sheetConfigs)` | 非 HTTP 多 Sheet 导出 | ### 导入 | 方法 | 说明 | |------|------| | `read(dataClass, inputStream)` | 读取第一个 Sheet | | `read(dataClass, inputStream, sheetNo)` | 按序号读取 | | `read(dataClass, inputStream, sheetName)` | 按名称读取 | | `readMultiSheet(inputStream, readConfigs)` | **多 Sheet 同时导入** | | `readAllSheets(inputStream, dataClass)` | 读取所有 Sheet | ## 风格优先级 列注解 > Sheet 注解 > YAML 全局配置 > 默认值 ## 常用颜色参考 | 颜色 | RGB Hex | 说明 | |------|---------|------| | 深蓝 | 1F4E79 | 稳重专业 | | 蓝色 | 4472C4 | 默认表头 | | 浅蓝 | D9E2F3 | 斑马纹奇行 | | 深红 | C00000 | 重要标记 | | 绿色 | 548235 | 成功/通过 | | 橙色 | ED7D31 | 警告/提醒 | | 灰色 | A5A5A5 | 辅助/禁用 | | 白色 | FFFFFF | 字体默认 | | 黑色 | 000000 | 内容默认 | ## License MIT