# 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