gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:20:28 27 4
gpt4 key购买 nike

我正在尝试在运行测试时在 Excel 中写入数据,并且在 Excel 测试类中我编写了一段代码来检查列下的特定行是否为空,然后写入数据,否则将该行增加 1,然后检查相同并写入数据。

我从另一个类(class)调用 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();

}
}

}

如果我们删除代码中的 block 注释(上面提到的),然后将注释添加到下面列出的代码中,那么它将只在调用函数时提供的单元格中写入数据。在下面的代码中,我开始一个循环,直到最多 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;
}

}

关于java - 如果使用 Java 的 Selenium 中每行和列的特定单元格为空,则无法使用 Apache POI 检查 Excel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56266665/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com