![](/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.