安装教程
1、添加依赖
- 添加依赖包
<dependency>
<groupId>com.gitee.sergius</groupId>
<artifactId>excel-processer</artifactId>
<version>1.0.0</version>
</dependency>
使用说明
1、 导入功能:(目前仅支持.xls文件的导入,示例参考:api-platform/api-web/src/main/java/com/gitee/sergius/apiweb/biz/ExcelImport.java
)
List<School> schools = ExcelToolFactory.createImportor()
.dataFormat("yyyy/MM/dd HH:mm")
.startRow(0)
.entityClass(School.class)
.inputFile(new FileInputStream(new File("d:/import.xls")))
.reflectMap(reflectMap)
.processMap(fieldProcessor)
.produce();
- dataFormat:用来定义excel文件中日期格式类型数据的格式样式。默认为“yyyy-MM-dd HH:mm:ss”
- startRow: 标识从excel文件中的哪一行开始导入,从0开始,默认为1
- entityClass:配置要将excel文件中每行数据转换成的实体对象类
- inputFile:配置数据读入来源,接受InputStream对象
- reflectMap:配置实体对象域和excel列的对应关系,举例:
Map<String,Integer> reflectMap = new HashMap<>(5);
reflectMap.put("name",0);
reflectMap.put("createDate",1);
reflectMap.put("address",2);
reflectMap.put("type",3);
reflectMap.put("feeLevel",4);
该例表示将第0列数据保存到实体的`name`域中,第1列保存到`createDate`域中,。。。
- processMap:配置某一列的数据处理,用在某一列需要做转换的情况下,举例:
Map<String,FieldProcessor> fieldProcessor = new HashMap<>(1);
fieldProcessor.put("feeLevel", src -> {
if("1000".equals(src)){
return "一级";
}else if("2000".equals(src)){
return "二级";
}else if("3000".equals(src)){
return "三级";
}else {
return "";
}
});
该例表示feeLevel域在存储时,如果excel中值为1000,则对应存储为`一级`,如果为2000,存储为`二级`,...
- produce:此方法要在最后调用,用来按照上面的配置项将excel转换成对应的实体对象列表。
- 导出功能:(目前仅支持.xls文件的导出,示例参考:
api-platform/api-web/src/main/java/com/gitee/sergius/apiweb/biz/ExcelExport.java
)
try {
ExcelToolFactory.createExportor()
.columnWidth(40)
.dataFormat("yyyy/MM/dd")
.sheetTitle("学校列表")
.startColumn(2)
.startRow(4)
.headers("学校名称", "建校日期", "学校类型", "学费层级", "学生名字", "年龄", "年级")
.excludedFields("School.address", "Student.birth")
.fieldReflectMap(fieldReflectMap)
.produce(schools)
.writeToFile("d:/", "complex.xls");
} catch (ExcelException e) {
e.getMessage();
}
- columnWidth:设置列宽,最小5,最大500,不设置默认为15
- dataFormat:设置日期类型数据展示格式,不设置默认为“yyyy-MM-dd HH:mm:ss”
- sheetTitle:设置sheet页名称,不设置默认为sheet1
- startColumn:设置数据写入起始列,从0开始,默认为0
- startRow: 设置数据写入起始行,从0开始,默认为0
- headers:设置列名称
- excludedFields:设置不导出的域,形式为“类名.属性名”,例如:User.bizType,需要导出的字段必须要有get方法否则抛出NoSuchMethodException
- fieldReflectMap:可以用该参数对数据库导出的某列数据做转换,举例:
Map<String, HashMap<String, Object>> fieldReflectMap = new HashMap<>(3);
HashMap<String, Object> switchMap = new HashMap<>(4);
switchMap.put("1", "小学");
switchMap.put("2", "中学");
switchMap.put("3", "大学");
switchMap.put(OTHER_REFLECT_KEY, "其他");
fieldReflectMap.put("School.type", switchMap);
该例表示将School对象中type域的值做转换,如果值为1,导出到excel中展示为“小学”,。。。
如果有不需要转换的值,可以用`switchMap.put(OTHER_REFLECT_KEY, "其他");`表示除1、2、3之外的值将被转换成“其他”。
- produce:按照上面的配置生成excel对象的实体缓存,该方法要在以上所有配置项之后调用。
- writeToFile、write、writeToHttpResponse:此方法要在最后调用,用来将生成的excel对象缓存写到对应的输出流中。其中:
writeToFile:将excel写到文件中。入参为对应的excel文件的存储路径和名称。
writeToHttpResponse:将excel写到HttpServletResponse中,用来web项目中页面下载。入参为对应的HttpServletResponse和生成的文件名。
write:将excel缓存写到对应的输出流中,入参为OutputStream。
如果要导出的对象里面有子对象组成的列表,那么子列表将会以合并单元格的形式导出。
源码及示例:
https://gitee.com/sergius/api-platform/tree/master
导入导出组件是excel-processer子工程