如果使用Java的Selenium中{行和列中的特定单元格为空,则无法使用Apache POI检入excel。

时间:2019-05-23 00:38:33

标签: java 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;
            }

        }

预期:应在没有单元格数据的行中写入数据。 实际:它什么也没写。

1 个答案:

答案 0 :(得分:0)

我已经找到了上述问题的解决方案,只需要更改少量代码即可,现在它可以按预期工作:

          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;
            }

            }