使用Java Apache POI搜索特定Excel单元格
我正在使用ApachePOIAPI读取Excel文件并检查可用产品的数量。我正在使用下面的代码成功地读取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
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
是该行的数量。