easyexcel读取excel转换为List<Map>示例代码
时间: 2023-12-10 13:41:22 浏览: 140
以下是使用阿里巴巴的 EasyExcel 库读取 Excel 并转换为 List<Map> 的示例代码:
```java
// 定义 Excel 文件路径
String filePath = "example.xlsx";
// 定义 Excel 表格中数据开始行数(从0开始计数)
int startRow = 1;
// 定义 Excel 表格中数据的列信息(key为列名,value为该列对应的 Java 对象属性名)
Map<String, String> columnMap = new HashMap<>();
columnMap.put("姓名", "name");
columnMap.put("年龄", "age");
columnMap.put("性别", "gender");
// 使用 EasyExcel 读取 Excel 并将数据转换为 List<Map> 结构
List<Map<String, Object>> dataList = new ArrayList<>();
EasyExcel.read(filePath, new ExcelListener(dataList, columnMap))
.sheet()
.headRowNumber(startRow)
.doRead();
```
其中,`ExcelListener` 是一个实现了 EasyExcel 的 `AnalysisEventListener` 接口的类,用于读取 Excel 数据并将其转换为 Map 结构。以下是 `ExcelListener` 类的示例代码:
```java
public class ExcelListener extends AnalysisEventListener<Map<Integer, String>> {
private List<Map<String, Object>> dataList;
private Map<String, String> columnMap;
public ExcelListener(List<Map<String, Object>> dataList, Map<String, String> columnMap) {
this.dataList = dataList;
this.columnMap = columnMap;
}
@Override
public void invoke(Map<Integer, String> rowData, AnalysisContext context) {
// 将 Excel 行数据转换为 Map 结构
Map<String, Object> dataMap = new HashMap<>();
for (Map.Entry<Integer, String> entry : rowData.entrySet()) {
String columnName = context.readSheetHolder().getCellDataList().get(entry.getKey()).getStringValue();
String propertyName = columnMap.get(columnName);
if (StringUtils.isNotEmpty(propertyName)) {
dataMap.put(propertyName, entry.getValue());
}
}
// 将 Map 结构的数据添加到列表中
dataList.add(dataMap);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
// 数据解析结束后的处理
}
}
```
在上面的代码中,`invoke` 方法会在每读取一行 Excel 数据时被调用。在该方法中,我们需要将 Excel 数据转换为 Map 结构,并将其添加到 `dataList` 列表中。最终,`dataList` 列表中的数据就是以 List<Map> 结构存储的 Excel 数据了。
阅读全文