如果根据行和Java中的Selenium中的特定单元格为空,则无法使用Apache POI检查Excel



我正在尝试在运行测试时和Excel测试类中写入数据在1,然后检查相同的数据。

来自我称为exceltest的另一堂课:

ExcelTest sfName = new ExcelTest("C:\Users\abc\eclipse-workspace\dgc\src\com\dg\base\utility\TestData.xlsx");
sfName.setCellData("Sheet1","SingleFactor Campaign",SFCampName);

exceltest类

public class ExcelTest
 {
public FileInputStream fis = null;
public FileOutputStream fos = null;
public XSSFWorkbook workbook = null;
public XSSFSheet sheet = null;
public XSSFRow row = null;
public XSSFCell cell = null;
String xlFilePath;
boolean isEmptyStringCell;
public ExcelTest(String xlFilePath) throws Exception
{
    this.xlFilePath = xlFilePath;
    fis = new FileInputStream(xlFilePath);
    workbook = new XSSFWorkbook(fis);
    fis.close();
}
public void setCellData(String sheetName, String colName, int rowNum, String value)
{
    try
    {
        int col_Num = -1;
        sheet = workbook.getSheet(sheetName);
        row = sheet.getRow(0);
        for (int i = 0; i < row.getLastCellNum(); i++) 
        {
            if(row.getCell(i).getStringCellValue().trim().equals(colName))
            {
                col_Num = i;
            }
        }
        sheet.autoSizeColumn(col_Num);
        for(int j=2; j<7; j++)
            {
            row = sheet.getRow(j - 1);
            if(row==null)
                row = sheet.createRow(j - 1);
            cell = row.getCell(col_Num);
            isEmptyStringCell=cell.getStringCellValue().trim().isEmpty();
            if (this.isEmptyStringCell)
            {
                cell = row.createCell(col_Num);
                cell.setCellValue(value);
                break;
            }
            else
            {
                j=j+1;
            }
            }
        /*row = sheet.getRow(rowNum - 1);
        if(row==null)
            row = sheet.createRow(rowNum - 1);
        cell = row.getCell(col_Num);
        if(cell == null)
            cell = row.createCell(col_Num);
        cell.setCellValue(value);*/
        System.out.println("The cell value is "+cell.getStringCellValue());
        fos = new FileOutputStream(xlFilePath);
        workbook.write(fos);
        fos.close();
    }
    catch (Exception ex)
    {
        ex.printStackTrace();
    }
   }

}

如果我们删除块注释(上面在代码中提到,然后将注释在下面列出的代码中添加,则在调用该函数时只需在单元格中写入数据即可。在下面的代码中,我启动循环直到最大7行,然后检查单元格是否包含数据,然后编写数据,然后写入数据,然后退出循环。

          for(int j=2; j<7; j++)
            {
            row = sheet.getRow(j - 1);
            if(row==null)
                row = sheet.createRow(j - 1);
            cell = row.getCell(col_Num);
            isEmptyStringCell=cell.getStringCellValue().trim().isEmpty();
            if (this.isEmptyStringCell)
            {
                cell = row.createCell(col_Num);
                cell.setCellValue(value);
                break;
            }
            else
            {
                j=j+1;
            }
        }

预期:它应该在没有单元格数据的行中写入数据。实际:它没有写任何东西。

我找到了上述问题的解决方案,只需要更改几个代码,现在它正按预期工作:

          for(int j=2; j<7; j++)
            {
            row = sheet.getRow(j - 1);
            if(row==null)
                row = sheet.createRow(j - 1);
            cell = row.getCell(col_Num);
            //it will check if cell contains no value then create cell and set value                    
            if(cell == null)
            {
                cell = row.createCell(col_Num);
                cell.setCellValue(value);
                break;
            }
            }

最新更新