帮我写一个用Java语言生成的,读取Excel文件数据到一个Map中,且把表头为“姓名”的作为Key
时间: 2024-02-01 08:13:05 浏览: 105
好的,以下是一个简单的实现:
```java
import java.io.File;
import java.io.FileInputStream;
import java.util.HashMap;
import java.util.Map;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ExcelReader {
public static void main(String[] args) {
String filePath = "data.xlsx"; // Excel文件路径
String key = "姓名"; // Key为“姓名”的列
Map<String, String> dataMap = readExcel(filePath, key);
System.out.println(dataMap);
}
public static Map<String, String> readExcel(String filePath, String key) {
Map<String, String> dataMap = new HashMap<>();
try {
FileInputStream inputStream = new FileInputStream(new File(filePath));
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
Sheet sheet = workbook.getSheetAt(0); // 读取第一个Sheet
// 读取表头行
Row headerRow = sheet.getRow(0);
int keyIndex = -1;
for (int i = 0; i < headerRow.getLastCellNum(); i++) {
Cell cell = headerRow.getCell(i);
String cellValue = cell.getStringCellValue();
if (cellValue.equals(key)) {
keyIndex = i;
break;
}
}
// 读取数据行
for (int i = 1; i <= sheet.getLastRowNum(); i++) {
Row dataRow = sheet.getRow(i);
Cell keyCell = dataRow.getCell(keyIndex);
String keyValue = keyCell.getStringCellValue();
for (int j = 0; j < dataRow.getLastCellNum(); j++) {
if (j == keyIndex) {
continue;
}
Cell dataCell = dataRow.getCell(j);
String dataValue = dataCell.getStringCellValue();
String mapKey = keyValue;
if (dataMap.containsKey(mapKey)) {
mapKey += "_" + j; // Key重复时加上列序号
}
dataMap.put(mapKey, dataValue);
}
}
workbook.close();
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
return dataMap;
}
}
```
这个程序使用了 Apache POI 库来读取 Excel 文件,首先在 Maven 中添加依赖:
```xml
<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>
```
然后在 `readExcel` 方法中,首先读取表头行并找到 Key 所在的列,然后逐行读取数据并存入 Map 中,其中 Key 为“姓名”的列的值作为 Map 的 Key,而其他列的值作为对应的 Value。如果 Key 重复,则在 Key 后面加上列序号以避免冲突。
最后在 `main` 方法中调用 `readExcel` 方法,并输出得到的 Map。
阅读全文