# Apache POI Probleme mit Daten(Datum) die aus Formeln entstehen



## Declade (4. Nov 2014)

Guten Tag zusammen , 

ich habe folgendes Problem:
Mein Java Programm iteriert über ein Excelsheet und gibt diese (zur Überprüfung für mich ) in der Console aus. Das Dokument beinhaltet verschiedene Zelltypen + Inhalte die bearbeitet werden müssen.
Dafür habe ich mehrere switch-cases verwendet. Soweit so gut. Ein Zellentyp bereitet mir jedoch Probleme : eine Zelle die ein Datum beinhaltet welches aus einer Formel generiert wird.

Hier mal meine cases :

```
switch(cell.getCellType()){
       case Cell.CELL_TYPE_STRING:
    						   
       shortCode = cell.getStringCellValue().trim();
    						     																				
       System.out.println(X + "/" + Y	+"/" + "String: " + shortCode);
    						   
    break;
    					  
     case Cell.CELL_TYPE_NUMERIC:
    						   
     String cellText;
     HSSFDateUtil cal = null;
    						      						   
    						   
    	if (HSSFDateUtil.isCellDateFormatted(cell)) {
       // format in form of M/D/YY
       Date= date HSSFDateUtil.getJavaDate(cell.getNumericCellValue());

       String dateFmt = cell.getCellStyle().getDataFormatString();
    					           

       cellText = new CellDateFormatter(dateFmt).format(date); 
    					          
    					           
    					           
    	System.out.println(X + "/" + Y	+"/" + "Date: " + cellText);
    					         }
    						
         else{ 
    	  System.out.println(X + "/" + Y	+"/" + "Nummer: " + cell.getNumericCellValue());
    						}
    						   
          break;
       case Cell.CELL_TYPE_FORMULA:
    						   
    	 if (HSSFDateUtil.isCellDateFormatted(cell)) {
    					           
    	   Date date = HSSFDateUtil.getJavaDate(cell.getNumericCellValue());

           String dateFmt = cell.getCellStyle().getDataFormatString();
    					           

    	   cellText = new CellDateFormatter(dateFmt).format(date); 
    	  // takes care of idiosyncrasies of Excel
    					           
    	  System.out.println(X + "/" + Y	+"/" + "Date: " + cellText);
  					         }
    					      
    	  else
    					          
    	 { 
           System.out.println("Formel Inhalt: " + cell.getStringCellValue()); 
           System.out.println("Formel: " + cell.getCellFormula());
    	}
         break;
    						   
    					   }
```



In der Form wie es gerade dort steht, hat Java Probleme mit allen Formel-Cells.
Wenn ich den case Formular so ändere das nur das "else" dort steht, hat es wie oben gesagt Probleme mit Daten(Datum) die aus Formeln entstehen.

Ich hoffe ihr könnt mir helfen.

Mit freundlichen Grüßen 

 Declade


----------



## stg (4. Nov 2014)

Soso ... Probleme hast du also. Dann wäre es sicherlich hilfreich zu schildern, was das denn für Probleme sind!


----------



## Declade (4. Nov 2014)

In beiden Fällen bekomme ich die IllegalStateException:    Exception in thread "main" java.lang.IllegalStateException: Cannot get a numeric value from a text cell .

Da ich dieser Fehlermeldung schon das ein oder andere mal während der cases Erstellung begegnet bin, schließe ich daraus das er wie zuvor auch mit dem Datentyp nicht umgehen kann.

In diesem Fall: erste Zell beinhaltet eine Formel , hat als Inhalt jedoch einen String.
Wenn ich Formular umschreibe: Selbe Exception nur tritt diese bei einer Zelle auf, die als Inhalt ein Date hat, welches jedoch durch eine Formelberechnung entsteht.


Konkret geht es darum einen case zu erstellen, der ein Datum, welches aus einer Formel entsteht zurecht kommt und dieses einfach wieder als Datum ausgibt.

Ich hoffe ich konnte es etwas klarer machen.


Gruß 

Declade


----------



## Thallius (4. Nov 2014)

Du must nicht GetStringValue verwenden sondern GetCalculatedValue oder so ähnlich heist die Methode. Ein Blick in die Anleitung des Frameworks hilft hier...

Gruß

Claus


----------

