返回

Selenium WebDriver从Excel电子表格中读取数据:如何解决“无法从数字单元格中获取文本值”错误?

java

从 Excel 电子表格中读取文本数据

简介

在使用 Selenium WebDriver 从 Excel 电子表格中读取数据时,我们可能会遇到一个棘手的错误:“无法从数字单元格中获取文本值”。此错误表明我们尝试从格式化为数字的单元格中获取文本数据。本文将探讨此错误的原因并提供一种可靠的解决方案。

错误原因

当单元格格式化为数字时,Selenium 无法将单元格值转换为字符串。因此,当我们尝试从该单元格获取文本值时,它会引发错误。

解决方案

要解决此错误,我们需要在获取单元格值之前将单元格类型转换为字符串。使用 Java,我们可以使用以下代码:

cell.setCellType(Cell.CELL_TYPE_STRING);
String value = cell.getStringCellValue();

代码修改

在你的代码中,将以下行添加到循环中:

sheet.getRow(i).getCell(0).setCellType(Cell.CELL_TYPE_STRING);

示例

考虑以下 Java 代码,它使用 Selenium WebDriver 从 Excel 电子表格中读取文本数据:

WebElement searchbox = driver.findElement(By.name("j_username"));
WebElement searchbox2 = driver.findElement(By.name("j_password"));         

try {
    FileInputStream file = new FileInputStream(new File("C:\\paulo.xls")); 
    HSSFWorkbook workbook = new HSSFWorkbook(file);
    HSSFSheet sheet = workbook.getSheetAt(0);

    for (int i=1; i <= sheet.getLastRowNum(); i++){
        sheet.getRow(i).getCell(0).setCellType(Cell.CELL_TYPE_STRING);
        String j_username = sheet.getRow(i).getCell(0).getStringCellValue();
        String j_password = sheet.getRow(i).getCell(0).getStringCellValue();

        searchbox.sendKeys(j_username);
        searchbox2.sendKeys(j_password);
        searchbox.submit();  

        driver.manage().timeouts().implicitlyWait(10000, TimeUnit.MILLISECONDS);
    }

    workbook.close();
    file.close();
} catch (FileNotFoundException fnfe) {
    fnfe.printStackTrace();
} catch (IOException ioe) {
    ioe.printStackTrace();
}

现在,你的代码应该能够正确地从 Excel 电子表格中读取文本数据。

结论

通过遵循本文中概述的步骤,你可以轻松解决“无法从数字单元格中获取文本值”的错误,并从 Excel 电子表格中成功读取文本数据。

常见问题解答

  1. 为什么我收到“无法从数字单元格中获取文本值”的错误?

    • 因为 Selenium 无法将格式化为数字的单元格值转换为字符串。
  2. 如何解决此错误?

    • 在获取单元格值之前将单元格类型转换为字符串。
  3. 需要在代码中进行哪些具体更改?

    • cell.setCellType(Cell.CELL_TYPE_STRING); 添加到你的循环中。
  4. 修改后的代码示例是什么?

    • 请参阅本文中提供的示例代码。
  5. 如果我仍然遇到错误,该怎么办?

    • 请确保你已正确遵循步骤,并检查代码是否存在语法错误或逻辑错误。