通过excel行的Java迭代器
我正在检查每个excel行并寻找特定的值。在我找到该值后,它应该打印关于该行位置的输出。但如果该值不正确或未找到,我将打印“未找到匹配项”。所以每次我这样做时,我的输出总是:Match not found p.S.barcode是我从另一个类解析的字符串值(我调试过,它的值传递正确) 此外,若我只写if,而不写else,若程序能找到那个值,但若值不正确,我将一无所获 我的问题是,每次我运行那个if循环时,不管我的条形码字符串是否正确,我总是找不到匹配项 我的任务是扫描excel文件,找到一个我在本例中需要的值条形码并打印整行,但如果条形码不正确,我需要打印匹配未找到,用户将能够知道他输入的条形码不正确通过excel行的Java迭代器,java,excel,apache,Java,Excel,Apache,我正在检查每个excel行并寻找特定的值。在我找到该值后,它应该打印关于该行位置的输出。但如果该值不正确或未找到,我将打印“未找到匹配项”。所以每次我这样做时,我的输出总是:Match not found p.S.barcode是我从另一个类解析的字符串值(我调试过,它的值传递正确) 此外,若我只写if,而不写else,若程序能找到那个值,但若值不正确,我将一无所获 我的问题是,每次我运行那个if循环时,不管我的条形码字符串是否正确,我总是找不到匹配项 我的任务是扫描excel文件,找到一个我在
try {
FileInputStream file = new FileInputStream(new File("Turto sarašas 2016.09.30.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);
//Iterate through each rows one by one
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
//For each row, iterate through all the columns
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
//Check the cell type and format accordingly
final DataFormatter df = new DataFormatter();
String valueAsString = df.formatCellValue(cell);
if (valueAsString.equals(barcode)) {
System.out.print("Hello" + row.getCell(0));
System.out.print("Hello" + row.getCell(3));
} else if (!valueAsString.equals(barcode)) {
System.out.println(" Match not found");
}
}
}
file.close();
} catch (IOException e) {
}
试试看{
FileInputStream文件=新的FileInputStream(新文件(“Turto sarašas 2016.09.30.xlsx”);
//创建包含对.xlsx文件引用的工作簿实例
XSSF工作簿=新XSSF工作簿(文件);
//从工作簿中获取第一张/所需的工作表
XSSFSheet sheet=workbook.getSheetAt(0);
//逐个遍历每一行
迭代器rowIterator=sheet.Iterator();
while(roweiterator.hasNext()){
行=行迭代器。下一步();
//对于每一行,遍历所有列
迭代器cellIterator=row.cellIterator();
while(cellIterator.hasNext()){
Cell=cellIterator.next();
//检查相应的单元格类型和格式
final DataFormatter df=新的DataFormatter();
字符串值String=df.formatCellValue(单元格);
如果(值字符串等于(条形码)){
System.out.print(“Hello”+row.getCell(0));
System.out.print(“Hello”+row.getCell(3));
}如果(!valueAsString.equals(条形码))为else{
System.out.println(“未找到匹配项”);
}
}
}
file.close();
}捕获(IOE异常){
}
代码按预期工作。如果可能,共享输入xlsx以进行调试。1。永远不要跳过异常,因为如果抛出异常,您可以更快地获得问题的解决方案。我不在您使用的库中,但该值可以为null吗?可能该值为null,您尝试检查null字符串的值是否为所需的值。在比较字符串之前,可以为值添加空检查。值不为空。值只是excel中未列出的另一个字符串。不知道问题出在哪里,您应该检查您从excel中得到了什么(字符串值等于什么),但您的否则如果没有意义,它应该是否则。在空catch语句中添加一个简单的e.printStackTrace()
。可能会放一个计数器,而不是“未找到匹配项”打印输出。然后在file.close()之后打印计数器的值。计数器的值是否与Excel文件中的单元格数匹配?我的输入是8k行:未找到匹配项。就是这样,没有错误或类似的错误。我甚至搜索了所有行的ACC,看不出我的程序是否找到了我要找的1。在if语句中包含以下代码,最好注释掉或删除else if语句。System.out.println(cell.getAddress().getRow()+“/”+cell.getAddress().getColumn());getAddress代表什么?它是返回当前正在处理的行和列位置的方法。但首先需要创建Address对象,然后可以从该对象调用getColumn和getRow,否则就不会发生这种情况。此外,若我删除了else语句,我将如何告诉用户他输入的条形码未找到匹配项?