# auto-excel-1.0 **Repository Path**: hman-fun/auto-excel-1.0 ## Basic Information - **Project Name**: auto-excel-1.0 - **Description**: auto-excel-1.0 版本,基于名称管理器导入excel,新增导入校验逻辑 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-01-07 - **Last Updated**: 2021-01-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 为什么使用AutoExcel? Excel导入导出在软件开发中非常常见,只要你接触过开发,就一定会遇到。相信很多人会跟我一样选择用Apache POI来完成这项工作,在感受到POI功能强大的同时,我的团队也遇到了以下问题: 1. 直接使用POI操作Excel将产生大量硬编码,你会在编码中写死行索引和列索引 2. 大量不可复用的格式控制编码,如背景色、对齐方式、单元格样式等 3. 实施顾问明明提供了现成的模板,却还要开发用代码实现一遍,开发效率低下 4. 模板调整时不得不动用开发资源 5. 简单的导出也需要写特定的代码 **AutoExcel**解决了上述问题,它非常简单,只需要少量的代码即可完成复杂的导入导出;使用它时,程序员对导入导出无感,即不需要直接操作POI;与此同时,实施顾问提供的Excel即是导入导出模板,除非新增数据源或字段,否则模板更新不需要动用开发资源。 **AutoExcel**并没有对POI进行过重的封装,而是充分利用了Excel本身具有的特性——名称管理器,通过一些小技巧,将单元格与数据源产生映射,从而解耦程序员与POI,避免产生硬编码,让导入导出工作变得愉快而不再是枯燥乏味。 ## 功能预览 | 导出前 | 导出后 | | ------------------------------------------------------------ | ------------------------------------------------------------ | | ![image](http://www.fenghaitao.net/wp-content/uploads/2020/08/basic_object.png) | ![image](http://www.fenghaitao.net/wp-content/uploads/2020/08/basic_object_result.png) | | ![image](http://www.fenghaitao.net/wp-content/uploads/2020/08/single_table.png) | ![image](http://www.fenghaitao.net/wp-content/uploads/2020/08/single_table_result.png) | | ![image](http://www.fenghaitao.net/wp-content/uploads/2020/08/multi_table.png) | ![image](http://www.fenghaitao.net/wp-content/uploads/2020/08/multi_table_result.png) | | ![image](http://www.fenghaitao.net/wp-content/uploads/2020/08/fill_data_to_the_right.png) | ![image](http://www.fenghaitao.net/wp-content/uploads/2020/08/fill_data_to_the_right_result.png) | 实现以上导出只需要编写以下少量代码(你需要额外的代码来准备数据源,例如从数据库中获取) ```java List paras = new ArrayList<>(); paras.add(new TemplateExportPara("BusinessUnit", DataGenerator.genBusinessUnit())); paras.add(new TemplateExportPara("Contract", DataGenerator.genContracts())); paras.add(new TemplateExportPara("Project", DataGenerator.genProjects())); List products = DataGenerator.genProducts(); TemplateExportPara para3 = new TemplateExportPara("Product", products); para3.setInserted(true); paras.add(para3); TemplateExportPara para5 = new TemplateExportPara("Product2", products); para5.setDataDirection(DataDirection.Right); paras.add(para5); ExcelSetting excelSetting = new ExcelSetting(); excelSetting.setRemovedSheets(Arrays.asList("will be removed")); AutoExcel.save(this.getClass().getResource("/template/Common.xlsx").getPath(), this.getClass().getResource("/").getPath() + "ExportWithTemplate.xlsx", paras, excelSetting); ``` 更多功能请前往[文档](http://www.fenghaitao.net/autoexcel-user-manual) ## 修改部分 > 主要修改了 auto-excel 的导入部分,使用了auto-excel 1.0 的基于名称管理器实现的导入功能,加上了自定义校验,支持导入嵌套表 等功能 ### 新的名称管理器命名规则 默认规则为: `entity.field / entity.field.SUM / entity.formula.x ` 为了支持嵌套表 `entity.innerEntity.field` 这种三级对象格式的情况,将公式的后缀修改为 ` _ ` 即为 : `entity.field / entity.field_SUM / entity.formula_x ` ### 导入嵌套表 默认 auto-excel 不支持嵌套表的导入,这里加了一个新注解 `@ExcelEntity` 来标注导入对象中的嵌套对象,实现导入嵌套表功能。 ### 导入校验 增加导入校验功能,支持 JSR303 注解校验,也可通过实现 `AutoExcelValidHandler` 接口 实现自定义校验。 校验不通过 👉 统一以抛异常的形式,进行处理。