# Leere Zellen aus einem Excel-sheet führen immer zu einer NullPointerException



## L0MiN (3. Okt 2014)

Hallo liebe Community,

ich habe von meinem Prof die Aufgabe bekommen Zeilen aus einer Exceldatei auszulesen und den Mittelwert sowie den Median zu berechen.

Die Methoden zum Berechnen der beiden Werte und eine Methode die mir die relevanten Werte ausließt und als double-Werte in einem Array speichert habe ich schon.

Nun habe ich jedoch noch das Problem,... das der nette bärtige Mann uns einige leere Zellen mitten in der Tabelle hinterlassen hat, die nicht mit in die Berechnung einbezogen werden sollen.

Mein Programm macht nur leider schon Probleme wenn es auf eine einzige leere Zelle stößt,... 

Versuch habe ich es schon indem ich über eine if-Abfrage mit [sheet.getRow(28).getCell(5).toString().equals(null) /.equals("") / ohne toString() / mit == ;  != ] und allem möglichem anderem die Zelle überspringen lassen wollte.... aber allem Anschein nach hasst eclipse mich und gibt immer eine NullPointerException aus 

Meine beiden Java-Dateien lade ich mit hoch,... nur die .xls lässt sich nicht hochladen :/

Ich würde mich riesig freuen wenn ihr mir dabei helfen könntet das Problem der leeren Zellen zu lösen,... denn auch das Eintragen der Werte ist mir deshalb noch nicht möglich.

Vielen Dank und liebe Grüße
L0MiN


----------



## JavaMeister (3. Okt 2014)

Wie man Fragen richtig stellt: eine Anleitung wie man Fragen erfolgreich in Usenet, Mailinglisten und Webforen stellt.


----------



## stg (3. Okt 2014)

Ohne in deinen Code geschaut zu haben, aber *.getRow()* und *.getCell()* können auch schon *null* zurückgeben.

Falls das nicht das Problem ist, dann hab ich wohl versehentlich in die falsche Glaskugel geschaut :rtfm:


----------



## L0MiN (3. Okt 2014)

War leider nicht die Frage die ich hatte,... ich muss aber auch zugeben das ich die Frage schlecht  gestellt habe


----------



## JavaMeister (3. Okt 2014)

Du postest nicht den Fehler.

Nicht die Eingabeparameter und nicht, was du erwartest und was stattdessen kommt.

Klar, dass die Leute dann anfangen zu Raten und dann kommt das dabei raus


----------



## L0MiN (3. Okt 2014)

So, nun nochmal ganz ruhig und sortiert^^

Ich schreibe ein kleines Programm in Eclipse und nutze Apache-POI um eine Exceldatei in Java zu "manipulieren".

Ich habe es schon geschafft gezielt Zellen auszulesen und die Inhalte als double-Werte in einem Array zu speichern.
Möchte ich nun aber mit den Werten des Arrays rechnen und eine der Zellen war leer, so bekomme ich immer wieder eine NullPointerException ausgegeben.

Auch der Versuch solche Meldungen über eine for-Schleife zu umgehen hat leider noch nicht geklappt...

So hole ich mir die Datei in das Programm:

                [ InputStream input = new FileInputStream("C:\\Verbrauchsdaten.xls");
		HSSFWorkbook wb = new HSSFWorkbook(input);
		HSSFSheet sheet = wb.getSheet("Verbrauchsdaten");]

Über den Folgenden Teil habe ich versucht das Problem erstmal geziehlt nur für eine Zelle zu lösen:

( Hier steuere ich gezielt die leere Zelle A1 in der Datei an  ) 

[ if (sheet.getRow(0).getCell(0).toString().equals(null)){    
        System.out.println("Die Zelle ist leer!");                    
     } else {                                                                         
        System.out.println("Die Zelle ist gefüllt!");                     
     }                                                                 ]

(Auch versuch habe ich .equals("") / sheet.getRow(0).getCell(0).toString() == null / "" oder sheet.getRow(0).getCell(0).equals(null) )

Immer bekomme ich eine NullPointerException :/

Ich hoffe diesmal ist meine Frage besser gestellt und lässt sich gut nachvollziehen 

Liebe Grüße


----------



## stg (3. Okt 2014)

Der Aufruf von *.equals(null)* ist natürlich Schwachsinn. Entweder wird *false* zurückgegeben, oder, wenn der String, auf dem du es aufrufst tatäschlich ebenfalls null ist, dann fliegt natürlich die NPE...

Schreib doch mal vor der if-Abfrage ein paar System-outs in deinen Code und schaue, was nun tatsächlich null ist und was nicht...


```
System.out.println(sheet == null); 
System.out.println(sheet.getRow(0) == null);
System.out.println(sheet.getRow(0).getCell(0) == null);
System.out.println(sheetgetRow(0).getCell(0).toString() == null);
```

....wie weit kommst du dabei, bis die NPE fliegt?
Und: Wenn eine Exception fliegt, dann poste doch einfach den gesamten StackTrace hier im Forum. So weiß ja nun immer noch keiner, was genau schief läuft.


----------



## L0MiN (3. Okt 2014)

Er fliegt genau in der Zeile "System.out.println(sheet.getRow(28).getCell(0) == null);" raus,... wie komme ich nochmal an den StackTrace? Eclipse zeigt mir leider nur 
        [Exception in thread "main" java.lang.NullPointerException
	at UebungEins.main(UebungEins.java:22) ] an.


----------



## Thallius (3. Okt 2014)

Ein letztes Mal in anderen Worten. Wenn du das dann wieder ignorierst hat es wohl keinen Sinn.

Zerlege diese Zeile in mehrere Einzelzeilen, wo du in jeder Zeile nur einen methode aufrufst.

Claus


----------



## stg (3. Okt 2014)

Dann scheint es so zu sein, dass ich mit meiner Vermutung in Beitrag #3 doch schon Recht hatte...
Hier in deinem Fall ist offenbar schon die ganze Zeile 28 *null*. Du kannst dann anschließend natürlich nicht mehr auf die Zelle 0 von Zeile 28 zugreifen, denn die Zeile gibt es schlicht nicht :I)


----------



## L0MiN (3. Okt 2014)

Genau so habe ich das ja gemacht und auch geschrieben das er an dem Punkt herausfliegt an dem ich die Zelle direkt anspreche.
Meine Frage war jetzt nur wie ich an den StackTrace komme um die Fehlersuche zu vereinfachen.

@stg Sry, dann habe ich das falsch verstanden,... 
Dann lag mein Fehler wohl darin um sicher zu gehen eine komplett leere Zeile zu verwenden,... ich glaube jetzt bekomme ich es hin... Vielen lieben Dank für deine Hilfe und deine Geduld  

PS. Deine Signatur ist toll xD


----------



## L0MiN (3. Okt 2014)

Geklappt hat es letztendlich über: 

```
System.out.println(sheet.getRow(18).getCell(5).toString().isEmpty() == true);
```

Der folgende Code führte leider immer zu einem false:

```
System.out.println(sheet.getRow(18).getCell(5) == null);
```


----------

