# 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项目 * 功能文档 * 案例完善