# excel-converter-starter **Repository Path**: yawensilence/excel-converter-starter ## Basic Information - **Project Name**: excel-converter-starter - **Description**: java对象的list与excel数据相互转化的 spring boot starter - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 4 - **Created**: 2019-01-27 - **Last Updated**: 2022-05-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # excel-converter-starter #### 介绍 java对象的list与excel数据相互转化,适用于根据Excel模板填写数据并导入,以及将业务数据导出为Excel表格的场景 使用简单: 1. 导入时只需要将java对象的属性写在Excel模板的第一行,即可准确导入为java对象的list; 2. 导出时无需配置即可按照java对象的属性导出,若配置了属性对应的表头,即可显示配置的表头信息 #### 软件架构 软件架构说明 #### 安装教程 ```xml com.jvm123 excel-converter-starter 1.2.1 ``` #### 使用说明 1. 将ExImporter或ExExporter注入使用即可 ```java @RestController public class DemoExcelConvertController { @Autowired private ExImporter exImporter; @Autowired private ExExporter exExporter; @GetMapping("test") public List person() { List peo = exImporter.convert("./企业人员汇总表.xlsx", Person.class); System.out.println(peo); return peo; } @GetMapping("test3") public void test3(HttpServletResponse response) throws IOException { Company c = new Company(); c.setAddress("address"); c.setAmount(0.1245D); c.setDate(new Date()); c.setMoney(0.23123); c.setName("yawn"); c.setId(12); exExporter.export(Arrays.asList(c, c, c), "./export.xlsx"); response.addHeader("Content-Disposition","attachment;filename=export.xlsx"); exExporter.export(Arrays.asList(c, c, c), response.getOutputStream()); } } ``` 2. 如需要设置导入或导出的属性,可在application.yml文件中配置,如下: ```yaml excel: converter: name: yawn props-map: default: name-row-index: 0 comment-row-index: 1 first-data-row-index: 2 name-header-map: id: ID name: 名称 address: 地址 date: 日期 show-name-row: true date-pattern: yyyy-MM-dd hh:mm:ss company: sheet-index: 1 name-row-index: 1 comment-row-index: 0 first-data-row-index: 2 last-data-row-index: -1 data-row-num: -1 start-column-index: 0 ``` 此配置示例重写了"default"配置以及添加了新的配置"company",使用这两个配置的属性进行导入或导出时,示例如下: ```java @RestController public class DemoExcelConvertController { @Autowired private ExImporter exImporter; @Autowired private ExExporter exExporter; @GetMapping("test2") public List test2() { List companyList = exImporter.convert("./企业人员汇总表.xlsx", "company", Company.class); System.out.println(companyList); return companyList; } @GetMapping("test4") public void test3(HttpServletResponse response) throws IOException { Company c = new Company(); c.setAddress("address"); c.setAmount(0.1245D); c.setDate(new Date()); c.setMoney(0.23123); c.setName("yawn"); c.setId(12); exExporter.export(Arrays.asList(c, c, c), "./export.xlsx"); response.addHeader("Content-Disposition","attachment;filename=export.xlsx"); exExporter.export(Arrays.asList(c, c, c), response.getOutputStream(), "company"); } } ``` 3. ExImporter导入调用的方法有: ```java public List convert(String filePath, String propsName, Class tClazz); public List convert(File file, String propsName, Class tClazz); public List convert(InputStream is, String propsName, Class tClazz); public List convert(String filePath, Class tClazz); public List convert(File file, Class tClazz); public List convert(InputStream is, Class tClazz); ``` 其中propsName为要使用的yml文件中配置的转换属性的名称 4. ExExporter导出调用的方法有: ```java public void export(List beanList, String pathFile); public void export(List beanList, File file); public void export(List beanList, OutputStream os); public void export(List beanList, String pathFile, String propsName); public void export(List beanList, File file, String propsName); public void export(List beanList, OutputStream os, String propsName); ``` 此外,还添加了将mapList导出的方法exportMapList(),参数与上面的方法类似。 ## 5. 按照模板导出 ![](img/exc6.png) * 如上图,将相应数据填入excel表格的相应位置,需要制作模板之后,进行以下配置: ```yaml excel: converter: props-map: grade: sheet-index: 0 date-pattern: yyyy年MM月dd日 name-location-map: name: B2 address: B4 age: D2 date: D15 gradeList: project: b8 grade: c8 totalGrade: project: B13 grade: C13 ``` > sheet-index配置了需要导出到的sheet;name-location-map配置了属性与导出位置坐标的对应关系。 * 然后在代码中使用ExTplExporter导出即可,如下: ```java @RestController public class DemoExcelConvertController { @Autowired private ExTplExporter exTplExporter; @GetMapping("test5") public void test5(HttpServletResponse response) throws IOException { Person person = createPerson(); response.addHeader("Content-Disposition","attachment;filename=grade.xlsx"); exTplExporter.export("成绩单模板.xlsx", person, response.getOutputStream(), "grade"); } } ``` #### 参与贡献 yawn Lau #### change list * v1.0 基本功能:导入、导出、按模板导出等 * v1.1 java对象导出excel时,增加对象子属性字段的支持(java对象子属性的字段也可以导出到excel中了) * v1.2.0 修复spring单例引起的多次数据导出重复显示的问题 * v1.2.1 修复导入excel时的一些已知问题