2017-03-13 4 views
0

Ich versuche, eine Website zu automatisieren, in der ich Ich versuche, Daten aus Excel zu lesen & Eingabe der Daten nacheinander in einem Textfeld.Kann nicht lesen von Excel als 'java.lang.ClassCastException: org.apache.poi.hssf.usermodel.HSSFCell kann nicht in java.lang.String umgewandelt werden' wird angezeigt

Ich verwende 'org.apache.poi' Version 3.12. Wenn ich jedoch versuche, die Daten von Excel einzugeben, bekomme ich den Fehler "java.lang.ClassCastException: org.apache.poi.hssf.usermodel.HSSFCell kann nicht in java.lang.String umgewandelt werden". Bei der Suche nach dem unteren Fehler bei Google habe ich festgestellt, dass wir "DataFormatter" verwenden müssen, um eine Zelle zu formatieren. Auch nach der Verwendung von DataFormatter sehe ich weiterhin den folgenden Fehler.

Der Code aus Excel zu lesen ist, wie unten

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

Und mein Code, um die Werte in die Webseite ist als unten eingeben.

@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(); 
} 

Könnte mir jemand zeigen, wo ich falsch liege. Vielen Dank!!

EDIT: Ich erhalte den Fehler in der folgenden Zeile

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

Stack Trace:

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) 
+1

Was auf der Erde macht Sie denken, Sie können dies tun 'String exerciseType = (String) colData.get (1) ; '? Hat das Casting von zufälligen Objekten zu "String" jemals für Sie funktioniert? –

+0

Apache poi hat Methoden, um verschiedene Arten von Daten in Excel zu erhalten. Benutze das stattdessen. – imprezzeb

+0

Fügen Sie den vollständigen StackTrace hinzu und markieren Sie die Zeile, in der der Fehler auftritt – Jens

Antwort

1

Verwenden getStringCellValue() auf einer Zelle ihren Inhalt als String zu erhalten.

In Ihrem Fall, ich denke, es sein sollte:

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

See: apache poi cell documentation

Verwandte Themen