使用Java Apache POI搜索特定Excel单元格

使用Java Apache POI搜索特定Excel单元格,java,excel,apache-poi,Java,Excel,Apache Poi,我正在使用ApachePOIAPI读取Excel文件并检查可用产品的数量。我正在使用下面的代码成功地读取excel文件,但我无法读取特定单元格(数量列)以检查产品是否可用 package practice; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.File; import java.io.F

我正在使用ApachePOIAPI读取Excel文件并检查可用产品的数量。我正在使用下面的代码成功地读取excel文件,但我无法读取特定单元格(数量列)以检查产品是否可用

    package practice;
    import org.apache.poi.ss.usermodel.*;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.util.Iterator;
    public class ReadingExcel {
    private static String brand = "Nike";
    private static String shoeName = "Roshe One";
    private static String colour = "Black";
    private static String size = "9.0";
    private static String quantity;

public static void main(String [] args){
    try {

        FileInputStream excelFile = new FileInputStream(new File("C:\\Users\\admin\\Downloads\\Project\\assets\\Shoe_Store_Storeroom.xlsx"));
        Workbook workbook = new XSSFWorkbook(excelFile);
        Sheet datatypeSheet = workbook.getSheetAt(0);
        DataFormatter dataFormatter = new DataFormatter();
        Iterator<Row> iterator = datatypeSheet.iterator();
        while (iterator.hasNext()) {
            Row currentRow = iterator.next();
            Iterator<Cell> cellIterator = currentRow.iterator();
            while (cellIterator.hasNext()) {
                Cell cell = cellIterator.next();
                String cellValue = dataFormatter.formatCellValue(cell);
                System.out.print(cellValue + "\t\t");
            }
            System.out.println();

        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }  
}
包装实践;
导入org.apache.poi.ss.usermodel.*;
导入org.apache.poi.xssf.usermodel.xssf工作簿;
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.FileNotFoundException;
导入java.io.IOException;
导入java.util.Iterator;
公共类读取Excel{
私有静态字符串brand=“Nike”;
私有静态字符串shoeName=“Roshe One”;
专用静态字符串color=“黑色”;
私有静态字符串size=“9.0”;
私有静态字符串数量;
公共静态void main(字符串[]args){
试一试{
FileInputStream excelFile=newfileinputstream(新文件(“C:\\Users\\admin\\Downloads\\Project\\assets\\Shoe\u Storeroom.xlsx”);
工作簿=新XSSF工作簿(Excel文件);
工作表数据类型工作表=工作簿。getSheetAt(0);
DataFormatter DataFormatter=新的DataFormatter();
迭代器迭代器=datatypeSheet.Iterator();
while(iterator.hasNext()){
Row currentRow=iterator.next();
迭代器cellIterator=currentRow.Iterator();
while(cellIterator.hasNext()){
Cell=cellIterator.next();
字符串cellValue=dataFormatter.formatCellValue(单元格);
系统输出打印(cellValue+“\t\t”);
}
System.out.println();
}
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}  
}
}

这是我的excel文件

使用opencsv 4.1我可以做到这一点

import org.apache.commons.lang.StringUtils;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

...

    try (InputStream excelFile  = new FileInputStream(new File(fileName));
            Workbook wb = new XSSFWorkbook(excelFile);) {
        for (int numSheet = 0; numSheet < wb.getNumberOfSheets(); numSheet++) {
            Sheet xssfSheet = wb.getSheetAt(numSheet);

            xssfSheet.forEach(row -> {

                Cell cell = row.getCell(0);

                if (cell != null) {                     
                    if(StringUtils.isNumeric(cell.getStringCellValue())){

                        // Use here cell.getStringCellValue()
                    }
                }

            });

        }
    }
import org.apache.commons.lang.StringUtils;
导入org.apache.poi.ss.usermodel.Cell;
导入org.apache.poi.ss.usermodel.Sheet;
导入org.apache.poi.ss.usermodel.工作簿;
...
try(InputStream excelFile=newfileinputstream(newfile(fileName));
工作簿wb=新XSSF工作簿(Excel文件);){
对于(int numSheet=0;numSheet{
Cell Cell=row.getCell(0);
如果(单元格!=null){
if(StringUtils.isNumeric(cell.getStringCellValue())){
//在此处使用cell.getStringCellValue()
}
}
});
}
}
将以下内容用于循环:

for(int r=sh.getFirstRowNum()+1; r<=sh.getLastRowNum(); r++){   //iterating through all the rows of excel
            Row currentRow = sh.getRow(r);                              //get r'th row
            Cell quantityCell = currentRow.getCell(4);                  //assuming your quantity cell will always be at position 4; if that is not the case check for the header value first
            String currentCellValue = quantityCell.getStringCellValue();
            if(currentCellValue.equalsIgnoreCase(<value you want to campare with>))
                //<do your further actions here>
            else
                //do your further actions here
        }

for(int r=sh.getFirstRowNum()+1;r不清楚问题的确切位置。“数量”列是列
E
(单元格索引4)。因此,该列中的单元格为。用户将提供品牌名称、鞋名、颜色和尺寸。然后程序将告诉您该鞋是否有现货。您已经知道如何迭代工作表并获取单元格值。因此,请对每行执行此操作。获取
currentRow.getCell(0)
(Brand)的单元格值如
String brand
currentRow.getCell(1)
(鞋名)如
String shoeName
currentRow.getCell(2)
(颜色)如
String color
currentRow.getCell(3)
(大小)如
双倍尺寸
currentRow.getCell(4)
(数量)作为
双倍数量
。如果
searchedBrand.equals(brand)
searchedShoeName.equals(shoeName)
SearchedColor.equals(Color)
searchedSize==size
,则找到了正确的行。然后
quantity
是该行的数量。