无法从Excel中读取为';java.lang.ClassCastException:org.apache.poi.hssf.usermodel.HSSFCell不能强制转换为java.lang.String';显示

无法从Excel中读取为';java.lang.ClassCastException:org.apache.poi.hssf.usermodel.HSSFCell不能强制转换为java.lang.String';显示,java,selenium,webdriver,apache-poi,Java,Selenium,Webdriver,Apache Poi,我正在尝试自动化一个网站,在这个网站上我试图从Excel中读取数据&在文本框中一个接一个地输入数据 我使用的是'org.apache.poi'版本3.12。但是,当我试图从excel中输入数据时,会出现“java.lang.ClassCastException:org.apache.poi.hssf.usermodel.HSSFCell不能转换为java.lang.String”错误。在google上搜索下面的错误时,我发现我们需要使用“DataFormatter”来格式化单元格。即使在使用Da

我正在尝试自动化一个网站,在这个网站上我试图从Excel中读取数据&在文本框中一个接一个地输入数据

我使用的是'org.apache.poi'版本3.12。但是,当我试图从excel中输入数据时,会出现“java.lang.ClassCastException:org.apache.poi.hssf.usermodel.HSSFCell不能转换为java.lang.String”错误。在google上搜索下面的错误时,我发现我们需要使用“DataFormatter”来格式化单元格。即使在使用DataFormatter之后,我仍然会看到下面的错误

从excel读取的代码如下所示

public static ArrayList iterateCells(String sheetName) {
    // Array List to store the excel sheet data
    ArrayList excelData = new ArrayList();
    DataFormatter formatter = new DataFormatter();
    try {
        FileInputStream userDetailsFile = new FileInputStream("D:\\userLoginDetails.xls");

        HSSFWorkbook wb = new HSSFWorkbook(userDetailsFile);

        //Retrieve the first sheet of the workbook.
        //HSSFSheet excelSheet = wb.getSheetAt(0);
        int index = wb.getSheetIndex(sheetName);
        Sheet sheet = wb.getSheetAt(index);

        // Iterate through the sheet rows and cells.
        // Store the retrieved data in an arrayList
        Iterator rows = sheet.rowIterator();
        while (rows.hasNext()) {
            HSSFRow row = (HSSFRow) rows.next();
            Iterator cells = row.cellIterator();

            while (cells.hasNext()) {
                HSSFCell cell = (HSSFCell) cells.next();
                DataFormatter df = new DataFormatter();
                df.formatCellValue(cell);
                excelData.add(cell);
            }
        }
    } catch(IOException ex) {
        ex.printStackTrace();
    }
    return excelData;
}
我在网页中输入值的代码如下

@Test(dependsOnMethods="AddCardioExerciseForTheDay")
public void AddStrengthExerciseForTheDay() throws Exception {
    engineDriver.landingPageAfterLoggingIn.addExerciseAfterLoggingIn();
    List colData = new ArrayList();
    colData = wte.iterateCells("DataSheet");
    String exerciseType = (String) colData.get(1);

    engineDriver.exercisePage.selectStrengthExercise(exerciseType);
    engineDriver.exercisePage.goToAddFoodPage();
}
有人能告诉我哪里出了问题吗。谢谢

编辑:我在下面一行中得到了错误

String exerciseType = (String) colData.get(1);
堆栈跟踪:

java.lang.ClassCastException: org.apache.poi.hssf.usermodel.HSSFCell cannot be cast to java.lang.String
at com.myfitnesspal.tests.MfpExerciseLoggingTest.AddStrengthExerciseForTheDay(MfpExerciseLoggingTest.java:107)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:643)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:820)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1128)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
at org.testng.TestRunner.privateRun(TestRunner.java:782)
at org.testng.TestRunner.run(TestRunner.java:632)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:366)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:361)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:319)
at org.testng.SuiteRunner.run(SuiteRunner.java:268)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1244)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1169)
at org.testng.TestNG.run(TestNG.java:1064)
at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:236)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:81)

在单元格上使用
getStringCellValue()
,以字符串形式获取其内容

就你而言,我认为应该是:

String exerciseType = colData.get(1).getStringCellValue();

请参阅:

究竟是什么让你认为你可以这样做
String exerciseType=(String)colData.get(1)?将随机对象强制转换为
String
对您有用吗?ApachePOI提供了在excel中获取不同类型数据的方法。添加完整的stacktrace,并标记错误发生的位置。我认为,大部分混淆源于2017年使用rawtypes的坚定决心。不要。曾经使用原始类型。