Это потому, что метод getRows возвращает все строки, в которых есть ячейка с требуемыми критериями, но он не сообщает вам, какая именно ячейка, поэтому вам нужно вернуть ячейки.
getRows -> getCells
, и код для этого метода будет:
static List<Cell> getCells(Sheet sheet, DataFormatter formatter, FormulaEvaluator evaluator, String searchValue) {
List<Cell> result = new ArrayList<>();
String cellValue = "";
for (Row row : sheet) {
for (Cell cell : row) {
cellValue = formatter.formatCellValue(cell, evaluator);
if (cellValue.contains(searchValue)) {
result.add(cell);
break;
}
}
}
return result;
}
, а что касается печати, вы просто l oop через список ячеек, и вы их обычно притягиваете, и если вам по какой-либо причине нужна строка для определенной ячейки, вы просто вызываете cell.getRow ()
List<Cell> filteredCells = getCells(sheet, formatter, evaluator, "whatever");
for (Cell cell : filteredCells) {
System.out.print(formatter.formatCellValue(cell, evaluator));
System.out.print("\t \t");
Row cellsRow = cell.getRow();// if you need the full row
}
кстати , I не знаю о спецификациях, которые у вас есть, но разрыв, который у вас есть в вашем методе фильтрации, означает, что если в строке есть несколько ячеек с желаемым значением, вы получите только первую ячейку , поэтому будьте осторожны, я бы рекомендовал удалить этот разрыв, если это не именно то, что вам нужно