Невозможно проверить в Excel, используя Apache POI, если в Selenium с Java определенная ячейка в строке и столбце пуста - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь записать данные в Excel во время выполнения моих тестов и в тестовом классе Excel. Я написал код, чтобы проверить, пуста ли конкретная строка в столбце, затем записать данные, иначе увеличить строку на 1, а затем проверить то же и записать.data.

Из другого класса я звоню в 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 голосов
/ 30 мая 2019

Я нашел решение для вышеуказанного вопроса, и мне нужно всего лишь изменить немного кода, и теперь он работает как положено:

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

            }
...