问题背景:
上篇文章我们讲了关于数据导出Excel的方法 这篇继续以Excel为主题 跟大家分享关于将excel中的数据解析的方法 希望能帮助到你们。
问题实现:
1. maven依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.1.2</version>
</dependency>
2. 实现类方法
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.InputStream;
import java.util.*;
public class ExcelReader {
public List<Map<String, String>> readExcel(InputStream inputParam) {
List<Map<String, String>> data = new ArrayList<>();
List<String> headers = new ArrayList<>();
try (Workbook workbook = new XSSFWorkbook(inputParam)) {
Sheet sheet = workbook.getSheetAt(0);
boolean isFirstRow = true;
for (Row row : sheet) {
// 如果是第一行,解析并保存标题
if (isFirstRow) {
for (Cell cell : row) {
headers.add(new DataFormatter().formatCellValue(cell));
}
isFirstRow = false;
} else {
// 否则,解析数据行
Map<String, String> rowData = new HashMap<>();
int cellIndex = 0;
for (Cell cell : row) {
String cellValue = new DataFormatter().formatCellValue(cell);
rowData.put(headers.get(cellIndex++), cellValue);
}
data.add(rowData);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return data;
}
public static void main(String[] args) {
// 假设这里有一个InputStream,例如从文件或者网络获取
InputStream inputParam = null; // 你需要提供实际的InputStream
// 请确保inputParam不是null,并且指向了一个有效的Excel文件
ExcelReader reader = new ExcelReader();
List<Map<String, String>> excelData = reader.readExcel(inputParam);
// 输出解析结果
for (Map<String, String> row : excelData) {
System.out.println(row);
}
// 关闭InputStream(如果需要)
if (inputParam != null) {
try {
inputParam.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}