Если необходимо получить только те строки, в которых значения ячеек содержат строку поиска, этого можно достичь, пройдя по всем строкам и ячейкам на листе и получив значения ячеек. Если значение ячейки содержит строку поиска, добавьте строку в список строк List<Row>
. Поскольку все значения ячеек должны быть преобразованы в строку, поскольку искомое значение является строкой, можно использовать DataFormatter . Методы formatCellValue
для DataFormatter
получают все значения ячеек в виде форматированных строк. Для поддержки ячеек формулы также необходимо использовать DataFormatter
вместе с FormulaEvaluator .
В следующем примере представлен метод
List<Row> getRows(Sheet sheet, DataFormatter formatter, FormulaEvaluator evaluator, String searchValue) {
List<Row> result = new ArrayList<Row>();
String cellValue = "";
for (Row row : sheet) {
for (Cell cell : row) {
cellValue = formatter.formatCellValue(cell, evaluator);
if (cellValue.contains(searchValue)) {
result.add(row);
break;
}
}
}
return result;
}
Этот метод пересекает заданную sheet
и получает все значения ячеек, используя DataFormatter
и FormulaEvaluator
. Если найденное значение ячейки содержит искомое значение, строка добавляется в список, иначе нет. Таким образом, результатом является List<Row>
, который содержит только строки, в которых ячейки содержат строку поиска.
Полный пример:
import org.apache.poi.ss.usermodel.*;
import java.io.FileInputStream;
import java.util.List;
import java.util.ArrayList;
class ReadExcelRows {
//get only rows where cell values contain search string
static List<Row> getRows(Sheet sheet, DataFormatter formatter, FormulaEvaluator evaluator, String searchValue) {
List<Row> result = new ArrayList<Row>();
String cellValue = "";
for (Row row : sheet) {
for (Cell cell : row) {
cellValue = formatter.formatCellValue(cell, evaluator);
if (cellValue.contains(searchValue)) {
result.add(row);
break;
}
}
}
return result;
}
public static void main(String[] args) throws Exception {
Workbook workbook = WorkbookFactory.create(new FileInputStream("./inputFile.xlsx"));
//Workbook workbook = WorkbookFactory.create(new FileInputStream("./inputFile.xls"));
DataFormatter formatter = new DataFormatter();
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
Sheet sheet = workbook.getSheetAt(0);
List<Row> filteredRows = getRows(sheet, formatter, evaluator, "zgheib");
for (Row row : filteredRows) {
for (Cell cell : row) {
System.out.print(cell.getAddress()+ ":" + formatter.formatCellValue(cell, evaluator));
System.out.print(" ");
}
System.out.println();
}
workbook.close();
}
}