Ваш код выглядит довольно грязно и может быть немного очищен.Этот блок бессмысленен:
String filename = "testData";
String path = System.getProperty("user.dir") + "/data/testData.xlsx";
if (path == null || path.length() == 0) {
path = System.getProperty("user.dir") + "/data/" + filename + ".xlsx";
}
Вы просто жестко программируете одну и ту же вещь по-разному, придерживаясь только
String path = System.getProperty("user.dir") + "/data/testData.xlsx";
Довольно неясно, что вы пытаетесь сделать здесь, ноЯ предполагаю, что вы хотите значение во втором столбце, которое связано с ключом, который находится в первом столбце.Все вещи, создающие объект свойств, кажутся полностью устаревшими, поэтому я переписал ваш код так:
Workbook SapWorkbook = new XSSFWorkbook(fs);
Sheet SapSheet = SapWorkbook.getSheet("Sheet1");
int rowCount = SapSheet.getLastRowNum() - SapSheet.getFirstRowNum();
for (int i = 0; i < rowCount + 1; i++) {
Row row = SapSheet.getRow(i);
if (key.equals(row.getCell(0).getStringCellValue())) {
return row.getCell(1).getStringCellValue();
}
}
throw new IllegalArgumentException(String.format("%s not found!", key));
Это теперь будет прокручивать каждую строку в поисках первого экземпляра вашего «ключа» изатем вернет соответствующее «значение».Если он не найдет ключ, он выдаст исключение.Чтобы упаковать все в один метод:
public static String readTestData(String key) throws IllegalArgumentException, IOException {
String path = System.getProperty("user.dir") + "/data/testData.xlsx";
FileInputStream fs = new FileInputStream(path);
Workbook SapWorkbook = new XSSFWorkbook(fs);
Sheet SapSheet = SapWorkbook.getSheet("Sheet1");
int rowCount = SapSheet.getLastRowNum() - SapSheet.getFirstRowNum();
for (int i = 0; i < rowCount + 1; i++) {
Row row = SapSheet.getRow(i);
if (key.equals(row.getCell(0).getStringCellValue())) {
return row.getCell(1).getStringCellValue();
}
}
throw new IllegalArgumentException(String.format("%s not found!", key));
}