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.
Prüfen ob Zelle in Excel leer ist funktioniert nicht (Apache POI)
Ich bin neu hier im Forum und habe erst vor kurzem mit Java angefangen. Da ich Daten aus einem Excel Dokument auslesen möchte, habe ich mir Apache POI heruntergeladen. Ich habe folgenden Code, der aber leider nicht funktioniert und ich weiss einfach nicht warum.
Java:
public static void main(String[] args) {
int startReihe = 58;
int startZelle = 1;
JFileChooser chooser = new JFileChooser();
int eingabe = chooser.showOpenDialog(null);
if(eingabe == JFileChooser.APPROVE_OPTION) {
try {
HSSFWorkbook rechnung = new HSSFWorkbook(new FileInputStream(chooser.getSelectedFile()));
HSSFSheet blatt = rechnung.getSheetAt(0);
Row reihe = blatt.getRow(startReihe);
Cell zelle1 = reihe.getCell(startZelle);
CellType type = zelle1.getCellTypeEnum();
if (type == CellType.BLANK) {
System.out.println("Zelle ist leer");
}
rechnung.close();
} catch(Exception e) {
}
}
}
Ich möchte damit überprüfen ob die gewählte Zelle leer ist und falls sie leer ist etwas ausführen. Allerdings funktioniert der Befehl if (type == CellType.BLANK) nicht und ich weiss nicht warum. Wenn ich in die gewählte Zelle im Excel Dokument zum Beispiel etwas reinschreibe und dann dasselbe mit if (type == CellType.STRING) mache, funktioniert es ohne Probleme. Was mache ich falsch?
Für Hilfe wäre ich euch wirklich sehr dankbar, ich habe schon alles mögliche ausprobiert, aber nichts scheint zu funktionieren.
@Joose und @Kababär
Ich habe jetzt die Typen _NONE, BLANK, BOOLEAN, ERROR, FORMULA, NUMERIC und STRING durchprobiert, aber nichts scheint zu funktionieren. Danke auch für den Hinweis zum leeren Catch Block. Zuerst würde ich aber gerne herausfinden können ob eine Zelle leer ist.
So habe ich es auch noch versucht, geht aber auch nicht:
Code:
String zellenwert = zelle1.getStringCellValue();
if (zellenwert.isEmpty()) {
System.out.println("Zelle ist leer");
}
Dann habe ich auch noch folgendes versucht, was leider auch nicht funktioniert:
Code:
if (type != CellType.NUMERIC) {
System.out.println("Zelle");
}
@Joose und @Kababär
Ich habe jetzt die Typen _NONE, BLANK, BOOLEAN, ERROR, FORMULA, NUMERIC und STRING durchprobiert, aber nichts scheint zu funktionieren.
Vielen Dank für eure Hilfe. Ich habe das e.printStackTrace() hinzugefügt, danke. Folgendes wird ausgegeben: java.lang.NullPointerException
at rechnungen.test.main(test.java:35) (in Linie 35 ist folgender Code: CellType type = zelle1.getCellTypeEnum()
Ich habe auch gerade mal getestet die betreffende Zelle als Text oder Zahl zu formatieren, aber leer zu lassen, dann funktioniert es. Mit dem Befehl System.out.println(type) wird dann BLANK ausgegeben.
Kann es sein, dass es am Dokument liegt? Ich habe nämlich nur LibreOffice installiert und habe damit das Dokument von .xlsx nach .xls umgewandelt.
Naja mein Reden. Sicherheitsabfragen braucht kein Mensch. Und wir stellen hier wer weiß was für Vermutungen an. Teste doch einfach erstmal ob es die Reihe überhaupt gibt bevor du sie weiter benutzt. Es ist einfach schlechter Code davon auszugehen dass Methoden immer einen Wert zurückliefen den man erwartet. Solcher Code ist später eine tickende Zeitbombe.
@Thallius
Danke für deinen Beitrag. Allerdings verstehe ich nicht ganz, was du mit "Teste doch einfach erstmal ob es die Reihe überhaupt gibt bevor du sie weiter benutzt" meinst, da die Reihe und die Zelle im Dokument ja existiert. Wie würdest du denn dieses Problem lösen? Tut mir Leid, dass ich die Sicherheitsabfrage nicht von Anfang an im Code hatte, aber ich bin eben noch Anfänger.
@Joose
Danke für deine Antwort und den Link. Wie würdest du so ein Problem dann lösen? Oder muss ich dann immer zuerst die Zellen im betreffenden Dokument formatieren?
Danke für deinen Beitrag. Allerdings verstehe ich nicht ganz, was du mit "Teste doch einfach erstmal ob es die Reihe überhaupt gibt bevor du sie weiter benutzt" meinst, da die Reihe und die Zelle im Dokument ja existiert. Wie würdest du denn dieses Problem lösen?
OK, ich glaube, so langsam verstehe ich es. Vielen Dank euch allen für die Hilfe. Warum die Zelle als nicht definiert gilt, verstehe ich allerdings immer noch nicht, da sie ja existiert.
Ja wenn du eine neue Excel Datei anlegst kannst du alle Zellen sehen. Wie aus Wikipedia zu entnehmen https://de.wikipedia.org/wiki/Microsoft_Excel#Benutzeroberfl.C3.A4che geht es hier um Milliarden von Zellen.
Es wäre unsinnig alle "abzuspeichern" wenn sie gar nicht gebraucht werden, daher existieren bzw. sind nur diese definiert die verwendet werden.