Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich lese ein Excel-file mit Hilfe von POI ein.
Funktioniert alles fantastisch. Jetzt gibt es eine Situation, bei der ein Feld keinen Wert hat. Das führt bei einer bestimmten Zuweisung zu einer NullPointerException. Das soll vermieden werden könnnen. Ich habe aber bis jetzt keine Methode gefunden mit der man Zellen auf null prüfen kann. Primitive Datentypen kann man ja nur auf 0 usw. prüfen, aber nicht auf null. Im Falle von null müsste nämlich die Zelle auf 0 gesetzt werden, also dort reingeschrieben werden und mit diesem Wert soll dann weitergearbeitet werden.
Als Anregung hatte ich schon solche Sachen wie, ich hole mir den Wert mit getNumericCellValue, aber da komm ich auch nicht an null ran, der klinkt sich dann per Exception aus.
erst fragst du die Zelle ab,
> HSSFCell x = ..;
die Zelle ist nicht null?
wenn du an dieser besonderen Zelle aber getNumericCellValue() aufrufst, gibts im Inneren eine Exception,
du bist ganz sicher dass es nicht daran liegt dass x selber null ist, was du prüfen könntest?
CellType usw. schon angeschaut?
> Primitive Datentypen kann man ja nur auf 0 usw. prüfen, aber nicht auf null.
in welcher Situation hast du es denn mit einem primitiven Datentyp zu tun?
Das ist die eine Zeile, bei der die NullPointer kommt, da in diesem Fall in dieser Zelle kein Wert in der ExcelTabelle eingetragen ist. Die ExcelTabelle hat 5 Spalten und ich brauche immer die Werte aus der 2. und 3. Spalte.
Wenn jetz irgendwo kein Wert drinsteht, brauche ich eine Sicherheit, dass ich dort 0 reinschreibe, um die Exception zu verhindern.
In Spalte 2 und 3 stehen jeweils nur ganzzahlige Werte drin.
Es könnte dann doch auch sein, dass er ein anderer Typ ist, was ja nicht unbedingt heißt, dass die Zelle leer ist. Also ich vermute es nur, da es logisch klingt. Ich weiß nämlich nicht genau was hinter den einzelnen Zahlen steckt (bzw. welcher Typ weiß ich nicht).
Ok danke. Es ist also klar, dass wenn es nicht 3 ist (also nicht Blank), dass es immer noch eins der anderen Typen sein kann und nach meiner Logik dann die Zelle nicht unbedingt leer sein muss.
Fall's es Dich interessiert: HSSFCell#getCellType()
3 steht CELL_TYPE_BLANK also: leere Zelle. Wobei man dann im Code eher die statische Variable verwenden sollte:
hab gerade mein eigenen Fehler bemerkt, dass kommt wenn man nur ein teil des codes postet
So wie es da von mir steht, wird geprüft ob die nicht Leer(Blank) ist.
Richtig müsste es heißen:
Java:
if(row.getCell(reihe).getCellType() == 3){
System.out.println("Zelle ist leer");
}
Ja das ist wohl wahr. Jetzt, wenn es zutrifft, müsste das Feld leer sein, bzw. mindestens ein Leerzeichen enthalten. Das macht aber einen Unterschied zwischen leer und nicht leer, denn ein Leerzeichen ist auch ein Zeichen, somit ist die Zelle nicht wirklich leer.
Ja das ist wohl wahr. Jetzt, wenn es zutrifft, müsste das Feld leer sein, bzw. mindestens ein Leerzeichen enthalten. Das macht aber einen Unterschied zwischen leer und nicht leer, denn ein Leerzeichen ist auch ein Zeichen, somit ist die Zelle nicht wirklich leer.
Hab es mal eben kurz getestet
Wenn die Zelle komplet, Leer ist, kommt das syso bei
Java:
if(row.getCell(reihe).getCellType() == 3){
System.out.println("Zelle ist leer");
}
Ist aber ein Leerzeichen drinne, ist die Zelle nicht Leer und somit !=Blank,
d.h. Es geht damit zu Prüfen ist aber risikoreich. Ich würde meine Variante
nicht empfehlen!
Ich würde das von Slater nehmen *Schleichwerbung mach*
Jo so würd ich es auch machen. Also du musst immer schön aufpassen, Leerzeichen heißt nicht, die Zelle ist leer, aber das weißt du jetzt auch^^
Also danke für die Beratung, auch wenn ich selber auf die Lösung dann gekommen bin (außer mit .toString()), aber es ist irgendwie sehr oft so, wenn man etwas dann Anderen zu erklären versucht, dass man selber schon auf die Lösung kommt, da man sich die Logik quasi nochmal reinzieht und dann auch auf neue Ideen kommt.