![](/img/trans.png)
[英]How to search an Excel sheet for a specific date using Apache POI?
[英]How do i search and print a specific cell from an excel sheet using Apache POI?
我正在為圖書館排序項目編寫 java 代碼,我想要它做的是在特定列中的所有單元格中搜索字符串,然后打印包含給定 substring 的字符串,我想通過列來完成,因為我關於這本書的每條信息(作者、標題、ISBN)都有一列,那么有沒有辦法做到這一點? 到目前為止,我已經為此編寫了以下代碼(雖然沒有導入語句),它所做的只是打印包含 substring 的書的整行,我只需要它在選擇它后打印該行中的特定單元格
public class testf {
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 IOException, InvalidFormatException {
try
{
FileInputStream file = new FileInputStream(new File("C:\\\\Users\\\\abdul\\\\Desktop\\\\University Files\\\\Object-Oriented Programming\\\\Project files\\\\Book class\\\\Books & DDC.xlsx"));
//Create Workbook instance holding reference to .xlsx file
XSSFWorkbook workbook = new XSSFWorkbook(file);
//Get first/desired sheet from the workbook
XSSFSheet sheet = workbook.getSheetAt(0);
DataFormatter formatter = new DataFormatter();
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
Scanner a = new Scanner(System.in);
List<Row> filteredRows = getRows(sheet, formatter, evaluator, "y");
for (Row row : filteredRows) {
for (Cell cell : row) {
System.out.print(formatter.formatCellValue(cell, evaluator));
System.out.print("\t \t");
}
System.out.println();
}
file.close();
}
catch (Exception e)
{
e.printStackTrace();
}
} }
這是因為方法 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;
}
就打印而言,您只需遍歷單元格列表並正常打印它們,如果您出於某種原因需要特定單元格的行,您只需調用 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
}
順便說一下,我不知道你的規格,但你在過濾方法中的中斷意味着如果一行有多個單元格具有所需的值,你只會得到第一個單元格,所以小心一點,我建議刪除那個 break 除非它正是你想要的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.