# excel-converter **Repository Path**: JKDragon/excel-converter ## Basic Information - **Project Name**: excel-converter - **Description**: 基于poi的,将excel中的数据读取为java对象,以及将java对象的list导出到excel的工具 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2019-12-20 - **Last Updated**: 2020-12-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # excel-converter #### 功能介绍 1. 将excel中的数据读取(导入)为java对象 2. 将java对象的list导出到excel表格中 3. 将java对象的属性按照excel模板导出到相应的位置 #### 软件架构 软件架构说明 #### 使用说明 1. 将excel表中的数据读取(导入)为java对象的list ![exc01.jpg] 1.1 只需要实例化ExcelImporter对象,在调用convert方法就可以读取为java对象或者map的list,如下: ```java String filePath = "./企业人员汇总表.xlsx"; ExcelImporter excelImporter = new ExcelImporter(); // 读取为Map List> mapList = excelImporter.convertToMap(filePath); System.out.println(mapList); // 读取为Person List people = excelImporter.convert(new File(filePath), Person.class); System.out.println(people); ``` 其中convert方法和convertToMap方法都有以下不同的调用方法,参数为excel文件的路径(filePath)、文件(file)或输入流(inputStream): ```java public List> convertToMap(File file); public List> convertToMap(InputStream inputStream); public List> convertToMap(String filePath); public List convert(File file, Class tClass); public List convert(InputStream inputStream, Class tClass); public List convert(String filePath, Class tClass); ``` 1.2 如果需要自定义导入的属性,可以通过自定义ExcelProperties对象进行设置: ```java ExcelProperties properties = new ExcelProperties(); properties.setSheetIndex(1); properties.setCommentRowIndex(0); properties.setNameRowIndex(1); properties.setFirstDataRowIndex(2); properties.setDataRowNum(2); // 如果设置的dataRowNum大于0,则dataRowIndex的值将会被忽略 properties.setLastDataRowIndex(3); importer.setExcelProperties(properties); List companyList = importer.convert(filePath, Company.class); ``` 其中导入时可以设置以下属性(所有的index都从0开始算): | 属性名 | 默认值 | 说明 | | ----- | ---: | :--- | | sheetIndex | 0 | 要导入的表格(sheet)在excel文件中的索引顺序 | | nameRowIndex | 0 | 对应java中bean属性名称的行的序号 | | commentRowIndex | 1 | 对应每一列的说明的行的序号(可无) | | firstDataRowIndex | 2 | 要获取的数据开始行的序号 | | lastDataRowIndex | -1 | 要获取的数据结束行的序号(可无) | | dataRowNum | -1 | 要获取的数据的条数(可无) | 1.3 导入时需要在表格中设置java实体的字段,这行也可以设置隐藏而不展示给用户: ![exc02.jpg] 2. 将java对象的list导出到excel表格中 ![exc03.jpg] 2.1 实例化ExcelExporter对象,调用export方法即可导出为excel文件,如下: ```java List companyList = companys(); ExcelExporter exporter = new ExcelExporter(); exporter.export(companyList, "./companys.xlsx"); ``` 2.2 如果需要自定义导出的属性,可以通过自定义ExcelProperties对象进行设置: ```java ExcelProperties properties = new ExcelProperties(); LinkedHashMap map = new LinkedHashMap<>(); map.put("id", "ID"); map.put("name", "名称"); map.put("date", "日期"); map.put("money", "金额"); properties.setNameHeaderMap(map); properties.setShowNameRow(true); properties.setDatePattern("yy/MM/dd hh:mm:sss"); exporter.setProperties(properties); exporter.export(companyList, file); ``` 导出时可以设置以下属性(所有的index都从0开始算): | 属性名 | 默认值 | 说明 | | ----- | ---: | :--- | | showNameRow | false | 导出是否显示nameRow | | nameRowIndex | 0 | 对应java实体属性名的行(nameRow)的序号 | | commentRowIndex | 1 | 对应每一列的说明的行的序号(可无) | | datePattern | m/d/yy h:mm:ss | 导出日期类型的格式 | | columnWidth | 20 | 导出的表格中单元格的宽度 | | nameHeaderMap | null | 导出时java实体属性名的顺序及说明的对应关系(可无), 其中键名为java实体的属性名 | 3. 将java对象的属性按照模板导出 ![exc6.png] 3.1 实例化ExcelTplExporter对象,设置ExcelProperties后,再调用export方法即可按照模板导出excel文件,如下: ```java public class Test3 { public static void main(String[] args) throws FileNotFoundException { Person p = new Person(); p.setAddress("广东广州黄浦区科技企业加速器开元大道"); p.setAge("12"); p.setName("柳成功"); List gradeList = new ArrayList<>(); Map yuwen = new HashMap<>(); yuwen.put("project", "语文"); yuwen.put("grade", "90"); Map shuxue = new HashMap<>(); shuxue.put("project", "数学"); shuxue.put("grade", "100"); gradeList.add(yuwen); gradeList.add(shuxue); p.setGradeList(gradeList); Map totalGrade = new HashMap<>(); totalGrade.put("project", "总分"); totalGrade.put("grade", "190"); p.setTotalGrade(totalGrade); ExcelProperties properties = new ExcelProperties(); LinkedHashMap nameLocationMap = new LinkedHashMap<>(); nameLocationMap.put("name", "B2"); nameLocationMap.put("age", "D2"); nameLocationMap.put("address", "b4"); LinkedHashMap gradeMap = new LinkedHashMap<>(); gradeMap.put("project", "b8"); gradeMap.put("grade", "c8"); nameLocationMap.put("gradeList", gradeMap); LinkedHashMap totalGradeMap = new LinkedHashMap<>(); totalGradeMap.put("project", "b13"); totalGradeMap.put("grade", "c13"); nameLocationMap.put("totalGrade", totalGradeMap); properties.setNameLocationMap(nameLocationMap); ExcelTplExporter tplExporter = new ExcelTplExporter(); tplExporter.setProperties(properties); tplExporter.export("成绩单模板.xlsx", p, new FileOutputStream(p.getName() + "同学成绩单.xlsx")); } } ``` [exc01.jpg]: img/exc01.jpg [exc02.jpg]: img/exc02.jpg [exc03.jpg]: img/exc03.jpg [exc04.jpg]: img/exc04.jpg [exc6.png]: img/exc6.png #### 参与贡献 yawn Lau #### change list 1.0 基本功能 1.1 java对象导出excel时,增加对象子属性字段的支持(java对象子属性的字段也可以导出到excel中了)