Java 读取两个excel表并判断是否存在两个相同的人,如果存在就计算他们的年龄差
时间: 2024-02-05 20:10:39 浏览: 75
可以使用 Apache POI 库来读取 Excel 表格,并使用 HashMap 存储每个人的信息。以下是一个示例代码:
```java
import java.io.File;
import java.io.FileInputStream;
import java.util.HashMap;
import java.util.Iterator;
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.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ExcelReader {
public static void main(String[] args) {
try {
// 读取第一个 Excel 文件
FileInputStream file1 = new FileInputStream(new File("file1.xlsx"));
Workbook workbook1 = new XSSFWorkbook(file1);
Sheet sheet1 = workbook1.getSheetAt(0);
// 读取第二个 Excel 文件
FileInputStream file2 = new FileInputStream(new File("file2.xlsx"));
Workbook workbook2 = new XSSFWorkbook(file2);
Sheet sheet2 = workbook2.getSheetAt(0);
// 使用 HashMap 存储每个人的信息
Map<String, Integer> map = new HashMap<>();
Iterator<Row> rowIterator1 = sheet1.iterator();
while (rowIterator1.hasNext()) {
Row row = rowIterator1.next();
Cell nameCell = row.getCell(0);
Cell ageCell = row.getCell(1);
String name = nameCell.getStringCellValue();
int age = (int) ageCell.getNumericCellValue();
map.put(name, age);
}
Iterator<Row> rowIterator2 = sheet2.iterator();
while (rowIterator2.hasNext()) {
Row row = rowIterator2.next();
Cell nameCell = row.getCell(0);
Cell ageCell = row.getCell(1);
String name = nameCell.getStringCellValue();
int age = (int) ageCell.getNumericCellValue();
if (map.containsKey(name)) {
// 如果存在相同的人,计算年龄差
int ageDiff = Math.abs(map.get(name) - age);
System.out.println(name + " 的年龄差是 " + ageDiff);
} else {
map.put(name, age);
}
}
// 关闭文件流
file1.close();
file2.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
在上面的代码中,我们首先使用 FileInputStream 打开两个 Excel 文件,然后使用 XSSFWorkbook 和 getSheetAt 方法来获取文件中的第一个 Sheet。
接着,我们使用 Iterator 遍历每一行,并使用 getCell 方法获取单元格中的值。我们将每个人的姓名作为 HashMap 的键,年龄作为值,并将其存储在 HashMap 中。
在读取第二个 Excel 文件时,我们使用 containsKey 方法检查 HashMap 中是否存在相同的姓名。如果存在相同的姓名,我们可以计算其年龄差并输出结果。如果不存在相同的姓名,我们将其添加到 HashMap 中以便后续使用。
最后,我们关闭 FileInputStream 流以释放资源。
阅读全文