# advance-excel
**Repository Path**: decentant/advance-excel
## Basic Information
- **Project Name**: advance-excel
- **Description**: 基于POI的进阶Excel处理框架,更快捷更强大
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-07-05
- **Last Updated**: 2026-01-28
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 进阶Excel导入框架
## 📜简介
本框架基于POI,仅支持xlsx格式的导入导出,不支持xls和csv格式,专注于xlsx文件的导入导出,代码极简,简单好用。支持jdk8及以上版本。
## 🔭框架特点
### 整体特点
✅ 轻量级,仅依赖POI和Hutool,不依赖其他框架。
✅ 极简,仅支持xlsx导入导出,不支持其他格式。
✅ 单注解,导入导出共用一个注解,简洁、简单。
✅ 直接导出导入,导出的文件能够支持再次导入,对代码修改量极小。
✅ 链式配置,导入导出全部采用链式配置的方式进行,配置简单。
✅ 回调,拥有大量回调,支持多种修改。
✅ JavaBean和Map支持,支持JavaBean和Map导入导出。
✅ 支持基于范式的导入导出。
### 导出模块特点
✅ 支持分页,导出回调具有分页信息,支持分页导出。
✅ 极速,支持多线程分片导出。
✅ 自由,支持可使用模板导出。
✅ 支持压缩包,支持分页导出成多文件,然后整合为一个zip压缩包。
✅ 支持多工作簿导出,支持将数据分散到各个工作簿中,减轻单个工作簿压力。
✅ 自定义,支持表头样式自定义、数据样式、时间格式自定义。
✅ 支持导出Excel公式。
✅ 支持单元格批注导出。
✅ 支持Excel模板导出。
### 导入模块特点
✅ 低内存,使用流式导入,非直接将整个Excel表格读入内存。
✅ 详尽数据,导入结果数据非常详细。
✅ 多工作簿导入,支持多个工作簿导入。
✅ 注解校验,注解可以添加数据校验功能,通过注解直接校验数据。
✅ 表头自适应,支持重名表头准确赋值,还支持表头指定列索引。
✅ 导入支持行跳过。
✅ 导入支持同名表头。
✅ Map导入支持校验信息。
✅ 支持单元格批注导入。
✅ 支持zip包导入。
✅ 支持分片导入,尽可能降低内存使用。
## 📦安装
```xml
com.itdct.adexcel
advance-excel
1.9.1
```
## 📚使用案例
### Excel导入,基于HashMap导入
```java
ExcelInputAdvance excelInputAdvance = new ExcelInputAdvance<>();
ExcelInputResultBean resultBean = excelInputAdvance.input(new File("src/test/resources/学生导入模板-数据正确导入.xlsx"), HashMap.class);
for (HashMap hashMap : resultBean.getDataList()) {
log.info(JSONUtil.toJsonStr(hashMap));
}
```
### Excel导入,基于HashMap导出
```java
ArrayList> testMaps = new ArrayList<>();
for (int i = 0; i < 365; i++) {
HashMap hashMap = new LinkedHashMap<>();
hashMap.put("id", i);
hashMap.put("名称", "dct" + i);
hashMap.put("分数", RandomUtils.nextInt(0, 100));
hashMap.put("唯一值", UUID.fastUUID().toString(true));
hashMap.put("创建时间", new Date());
int typeRandom = RandomUtils.nextInt(0, 10000);
switch (typeRandom % 4) {
case 1:
hashMap.put("类型", "数据库");
break;
case 2:
hashMap.put("类型", "文件");
break;
case 3:
hashMap.put("类型", "大数据");
break;
default:
hashMap.put("类型", "虚拟库");
}
testMaps.add(hashMap);
}
ExcelExportAdvance> excelExportAdvance = new ExcelExportAdvance>()
.setExportPath("C:\\Tmp")
.setExportFileName("测试导出Map数据_" + System.currentTimeMillis());
ExcelExportResultBean resultBean = excelExportAdvance.export(excelPageDataDto -> testMaps);
```
### 字段注解
```java
@Data
public class StudentBean {
@ExcelField(columnName = "id值", headComment = "id", minValue = 1L, maxValue = 10000000L, notBlank = true)
private Long id;
@ExcelField(columnName = "姓名", headComment = "学生姓名", minLength = 2, maxLength = 10, notBlank = true)
private String name;
@ExcelField(columnName = "生日", headComment = "学生生日")
private Date birthday;
@ExcelField(columnName = "手机号", headComment = "学生手机号", pattern = "^1[3-9]\\d{9}$", notBlank = true)
private String phoneNumber;
@ExcelField(columnName = "年级", headComment = "年级", validations = {"一年级", "二年级", "三年级", "四年级", "五年级", "六年级", "初一", "初二", "初三", "高一", "高二", "高三"}, notBlank = true)
private String gradeName;
@ExcelField(columnName = "班级", headComment = "班级", notBlank = true, validations = {"1班", "2班", "3班", "4班", "5班", "6班", "7班", "8班", "9班", "10班", "11班", "12班", "13班", "14班", "15班"})
private String classroomName;
@ExcelField(columnName = "专业", headComment = "专业", notBlank = true, validations = {"理科班", "文科班"})
private String majorName;
@ExcelField(columnName = "老师", headComment = "老师", maxLength = 10, minLength = 2)
private String teacherName;
@ExcelField(columnName = "语文分数", headComment = "语文分数", minValue = 0L, maxValue = 100L)
private Integer chineseScore;
@ExcelField(columnName = "数学分数", headComment = "数学分数", minValue = 0L, maxValue = 100L)
private Integer mathScore;
@ExcelField(columnName = "英语分数", headComment = "英语分数", minValue = 0L, maxValue = 100L)
private Integer englishScore;
@ExcelField(columnName = "老师评语", headComment = "老师评语", maxLength = 1000, hide = true)
private String teacherComment;
@ExcelField(columnName = "附加题", headComment = "附加分中的第一项", minValue = 0L, maxValue = 100L)
private Integer extraPoint1;
@ExcelField(columnName = "附加题", headComment = "附加分中的第二项", minValue = 0L, maxValue = 100L)
private Integer extraPoint2;
@ExcelField(columnName = "附加题", headComment = "附加分中的第三项", minValue = 0L, maxValue = 100L)
private Integer extraPoint3;
}
```
## 🔺注意事项
暂无
## 📑待实现功能
* SpringBoot集成
* demo项目
* 功能文档
* 案例完善