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

L0MiN

Mitglied
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
 

Anhänge

  • ExcelTools.java
    1,7 KB · Aufrufe: 14
  • UebungEins.java
    1,2 KB · Aufrufe: 12
Zuletzt bearbeitet:

stg

Top Contributor
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:
 
Zuletzt bearbeitet:

L0MiN

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

JavaMeister

Gesperrter Benutzer
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 ;)
 
Zuletzt bearbeitet:

L0MiN

Mitglied
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
 
Zuletzt bearbeitet:

stg

Top Contributor
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...

Java:
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

Mitglied
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

Top Contributor
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

Top Contributor
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

Mitglied
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
 
Zuletzt bearbeitet:

L0MiN

Mitglied
Geklappt hat es letztendlich über:
Java:
System.out.println(sheet.getRow(18).getCell(5).toString().isEmpty() == true);

Der folgende Code führte leider immer zu einem false:
Java:
System.out.println(sheet.getRow(18).getCell(5) == null);
 

Neue Themen


Oben