2016-07-20 7 views
1

Ich versuche, die Daten von Excel nach MySQL zu importieren.Kann keinen numerischen Wert aus einer Textzelle erhalten

java.util.ArrayList; 
    import java.util.Iterator; 

    import org.apache.poi.ss.usermodel.Cell; 
    import org.apache.poi.ss.usermodel.DataFormatter; 
    import org.apache.poi.ss.usermodel.Row; 
    import org.apache.poi.ss.usermodel.Sheet; 

    import moduleobject.Summary; 

    public class SummaryReader implements SheetReader<ArrayList<Summary>> { 

     public ArrayList<Summary> read(Sheet sheet) { 

      Iterator<Row> rowiterator = sheet.iterator(); 
      rowiterator.next(); 
      ArrayList<Summary> list = new ArrayList<>(); 
      Summary obj = new Summary(); 
      while (rowiterator.hasNext()) { 

       Row nextRow = rowiterator.next(); 
       Iterator<Cell> celliterator = nextRow.cellIterator(); 

       while (celliterator.hasNext()) { 

        obj.setProcessor(celliterator.next().getStringCellValue()); 
        obj.setProcessName(celliterator.next().getStringCellValue()); 

        obj.setLevel(celliterator.next().getNumericCellValue()); 
        obj.setPA11(celliterator.next().getNumericCellValue()); 
        obj.setPA21(celliterator.next().getNumericCellValue()); 
        obj.setPA22(celliterator.next().getNumericCellValue()); 

        // obj.setPA31(celliterator.next().getNumericCellValue()); 
        // obj.setPA32(celliterator.next().getNumericCellValue()); 
       } 
      } 

      list.add(obj); 

      return list; 
     } 

    } 

Der Fehler, den ich bekommen habe ist

Exception in thread "main" java.lang.IllegalStateException: Cannot get a numeric value from a text cell 
    at org.apache.poi.xssf.usermodel.XSSFCell.typeMismatch(XSSFCell.java:994) 
    at org.apache.poi.xssf.usermodel.XSSFCell.getNumericCellValue(XSSFCell.java:305) 
    at reader.SummaryReader.read(SummaryReader.java:32) 
    at reader.SummaryReader.read(SummaryReader.java:1) 
    at controller.JobController.startJob(JobController.java:69) at job.JobLauncher.main(JobLauncher.java:21) 

Warum ich diese Ausnahme erhalten haben?

+2

Warum 'jpa' und' Project'tag? – Jens

+2

Ich denke, die Fehlermeldung ist ziemlich klar. Der Wert in der Zelle wird formatiert als Text nicht als numerisch – Jens

+0

nein die Zelle hat einen numerischen Wert – meghna

Antwort

-1

Vielleicht eine der Art und Weise ist, dass Sie den Zellentyp einstellen können als

celliterator.next().setCellType(CELL_TYPE_STRING); 

, bevor Sie den Zellenwert und lesen den Zellenwert als string.Then lesen können Sie den String-Wert analysieren, wenn nummerieren erforderlich.

+1

Die [Apache POI JavaDocs sind sehr klar, dass dies der falsche Weg ist, Zahlen mit Strings zu behandeln] (https://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/Cell.html#setCellType (int)), also tu es nicht! – Gagravarr

1

Bitte verwenden:

DataFormatter formatter = new DataFormatter(); 
Cell cell = sheet.getRow(i).getCell(0); 
String var_name = formatter.formatCellValue(cell); 
Verwandte Themen