引言
在开发过程中,我们经常会遇到需要读取Excel文件并将数据转换成Java对象的需求。Apache POI是一个强大的库,它提供了读取和写入Microsoft Office格式文件的功能,包括Excel。本文将指导你如何使用Apache POI读取Excel文件,并将数据转换为List<Map<String, String>>格式,便于进一步的数据处理和分析。
准备工作
首先,确保你的项目中包含了Apache POI的依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖:
<!-- excel reader-start-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.2</version> <!-- 使用你所需的版本号 -->
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.2</version> <!-- 同上 -->
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.17.1</version> <!-- 使用你所需要的版本 -->
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.1</version> <!-- 同上 -->
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version> <!-- 使用你需要的版本 -->
</dependency>
<!-- excel reader-end -->
步骤详解
下面是使用Apache POI读取Excel文件的具体步骤:
package com.xsz.programmingarsenal.utils;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ExcelReader {
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream(new File("C:\\tmp\\test.xlsx"));
Workbook workbook = new XSSFWorkbook(fis);
Sheet sheet = workbook.getSheetAt(0); // 假设我们只读取第一个工作表
List<Map<String, String>> data = new ArrayList<>();
// 获取第一行作为列头
Row headerRow = sheet.getRow(0);
if (headerRow != null) {
for (int i = 1; i <= sheet.getLastRowNum(); i++) { // 从第二行开始读取数据
Row row = sheet.getRow(i);
if (row != null) {
Map<String, String> rowData = new HashMap<>();
for (Cell cell : headerRow) {
int colIndex = cell.getColumnIndex();
Cell dataCell = row.getCell(colIndex);
if (dataCell != null) {
// rowData.put(cell.getStringCellValue(), dataCell.getStringCellValue());
rowData.put(getStringValue(cell), getStringValue(dataCell));
}
}
data.add(rowData);
}
}
}
// 关闭资源
workbook.close();
fis.close();
// 打印结果
System.out.println(data);
} catch (Exception e) {
e.printStackTrace();
}
}
public static String getStringValue(Cell cell ){
CellType cellType = cell.getCellType();
String cellValue = null;
switch (cellType) {
case STRING:
cellValue = cell.getStringCellValue();
break;
case NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
// 如果是日期格式的数值,则转换为日期字符串
cellValue = cell.getDateCellValue().toString();
} else {
// 否则,转换为数字字符串
cellValue = String.valueOf(cell.getNumericCellValue());
}
break;
case BOOLEAN:
cellValue = String.valueOf(cell.getBooleanCellValue());
break;
case FORMULA:
// 处理公式单元格
cellValue = cell.getCellFormula();
break;
case BLANK:
cellValue = ""; // 或者null,取决于你的需求
break;
case ERROR:
cellValue = "ERROR"; // 或者抛出异常,取决于你的需求
break;
default:
throw new IllegalStateException("Unexpected cell type: " + cellType);
}
return cellValue;
// 现在你可以安全地使用cellValue了
}
}
测试
测试数据
结果
结语
通过上述步骤,你现在已经掌握了如何使用Java和Apache POI库读取Excel文件,并将数据转换为List<Map<String, String>>格式的方法。这种方法非常适合需要对Excel数据进行进一步处理和分析的场景。希望这篇博客能帮助你在日常开发中更加高效地处理Excel文件。