Excel 导入 java (一)

标签:

本文出自jvm123.com-java技术分享站:http://jvm123.com/2019/08/excel-converter.html

Excel-converter 是一个基于poi的,将excel中的数据读取为java对象,以及将java对象的list导出到excel的工具 。

添加依赖

<dependency>
  <groupId>com.jvm123</groupId>
  <artifactId>excel-converter</artifactId>
  <version>1.0</version>
</dependency>

可在中央仓库查询是否有最新版本: https://mvnrepository.com/artifact/com.jvm123

功能介绍

  1. 将excel中的数据读取(导入)为java对象
  2. 将java对象的list导出到excel表格中

(一) excel 数据导入为 java 系统的list

如下图,将左边表格中的数据到入为一个 List<Company> 的实例

Excel 导入 java (一)插图

1 实例化ExcelImporter对象,再调用convert方法就可以读取为java对象或者map的list,如下 :

String filePath = "./企业人员汇总表.xlsx";
ExcelImporter excelImporter = new ExcelImporter();
// 读取为Map
List<Map<String, Object>> mapList = excelImporter.convertToMap(filePath);
System.out.println(mapList);
// 读取为Person
List<Person> people = excelImporter.convert(new File(filePath), Person.class);
System.out.println(people);

其中convert方法和convertToMap方法都有以下不同的调用方法,参数为excel文件的路径(filePath)、文件(file)或输入流(inputStream):

public List<Map<String, Object>> convertToMap(File file);

public List<Map<String, Object>> convertToMap(InputStream inputStream);

public List<Map<String, Object>> convertToMap(String filePath);

public <T> List<T> convert(File file, Class<T> tClass);

public <T> List<T> convert(InputStream inputStream, Class<T> tClass);

public <T> List<T> convert(String filePath, Class<T> tClass);

2 如果需要自定义导入的属性,可以通过自定义ExcelProperties对象进行设置:

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<Company> companyList = importer.convert(filePath, Company.class);

其中导入时可以设置以下属性(所有的index都从0开始算):

属性名默认值说明
sheetIndex0要导入的表格(sheet)在excel文件中的索引顺序
nameRowIndex0对应java中bean属性名称的行的序号
commentRowIndex1对应每一列的说明的行的序号(可无)
firstDataRowIndex2要获取的数据开始行的序号
lastDataRowIndex-1要获取的数据结束行的序号(可无)
dataRowNum-1要获取的数据的条数(可无)

3 导入时需要在表格中设置java实体的字段,这行也可以设置隐藏而不展示给用户:

Excel 导入 java (一)插图(1)

(二) 将java的list导出到excel表格中 

Excel 导入 java (一)插图(2)

1 实例化ExcelExporter对象,调用export方法即可导出为excel文件,如下:

List<Company> companyList = companys();
ExcelExporter exporter = new ExcelExporter();
exporter.export(companyList, "./companys.xlsx");

2 如果需要自定义导出的属性,可以通过自定义ExcelProperties对象进行设置:

ExcelProperties properties = new ExcelProperties();
LinkedHashMap<String, String> 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开始算):

属性名默认值说明
showNameRowfalse导出是否显示nameRow
nameRowIndex0对应java实体属性名的行(nameRow)的序号
commentRowIndex1对应每一列的说明的行的序号(可无)
datePatternm/d/yy h:mm:ss导出日期类型的格式
columnWidth20导出的表格中单元格的宽度
nameHeaderMapnull导出时java实体属性名的顺序及说明的对应关系(可无), 其中键名为java实体的属性名

springBoot 中使用

在springboot中使用 请参考文章 另一篇文章 的介绍。