Wieso erfolgt keine Ausgabe. /Excel

Status
Nicht offen für weitere Antworten.

Titanpharao

Bekanntes Mitglied
Hi wieso erfolgt bei x Werten über 4 nur noch die obere Zeile als Ausgabe?

Code:
import java.io.File;
import jxl.*;


public class JavaExel {

	public static void main(String[] args) {
		try {
			int x=4;
			int y=10;
			Workbook workbook = Workbook.getWorkbook(new File("test.xls"));
			 Sheet sheet = workbook.getSheet(0);
			 Cell zelle; 
			 for(int i=0;i<y;++i){
				  for(int j=0;j<x;++j){
					  zelle=sheet.getCell(j,i);
					  System.out.print(zelle.getContents()+"\t");
				  }
				  System.out.println();
			  }
			workbook.close();
		} catch (Exception e) {
		}		  
	}
}

Excel sieht dabei so aus:

TI TD TS TC
1 0,1 eins e
1000 0,001 tausend t
1000000 0 million m
 

abollm

Top Contributor
Titanpharao hat gesagt.:
Hat keiner eine Ahnung, oder versteht einer die Frage nicht?

Ich verstehe dein Problem ehrlich gesagt nicht. Das Programm macht doch offensichtlich das, was es soll.
Was genau soll denn nach deiner Meinung passieren (was bis jetzt aber wohl nicht passiert)?
 

abollm

Top Contributor
Titanpharao hat gesagt.:
Steht doch ganz oben....wenn ich mehr als 4 Spalten auslese, dann zeigt er mir nur noch die erste Zeile an.

Nein, das Programm macht genau das, was es soll (ich habe es nachvollzogen). Vermutlich hast du in der 5. Spalte und 1. Zeile deiner Excel-Datei einen Wert, mit dem die jxl-Klassen nicht umgehen können. So etwas kommt schon mal vor.
 

abollm

Top Contributor
Titanpharao hat gesagt.:
Na ja da steht nichts drin :D also würde es dann nicht "nichts" ausgeben?

Mach mal Folgendes:
- Öffne deine Excel-Datei "test.xls" in MS Excel und speichere die als CSV-Datei ab.
- Schließe die XLS-Datei "test.xls" (ohne erneut abzuspeichern!)
- Öffne dann in Excel die erzeugte CSV-Datei und speichere sie als Excel-Datei (Endung .xls) unter einem neuen Namen ab
- Führe dann mit dieser neuen Excel-Datei dein obiges Java-Programm aus -> Was passiert dann?
 

Murray

Top Contributor
Das
Code:
      } catch (Exception e) {
      }
ist übel; so unterdrückst du evtl. auftretende Laufzeitfehler und wunderst dich dann, dass es nicht klappt.

Das Minimum an Fehlerbehandlung:
Code:
      } catch (Exception e) {
            e.printStackTrace();
      }
 

Titanpharao

Bekanntes Mitglied
@abollm brachte nichts..

Hmm...stimmt, habe mir das so dumm angewöhnt, weil ichs meistens nicht brauchte.

Fehlermeldung bei 5

TI TD TS TC java.lang.ArrayIndexOutOfBoundsException: 4
at jxl.read.biff.SheetImpl.getCell(SheetImpl.java:354)
at JavaExel.main(JavaExel.java:17)

hm...aber das kommt auch wenn ich zu viel vertikal lesen...aber da macht der weiter?
 

Murray

Top Contributor
Ariol hat gesagt.:
schreib in deinen for-schleifen statt ++i mal i++ (bzw. j++)
Das ist egal. Anders sieht das aus, wenn man - was man m.E. aus Gründen der Lesbarkeit besser lassen sollte - die Inkrementierung in die Schleifenbedingung integriert.

Bsp.:
Code:
public class ForTest {

	public static void main(String[] args) {

		for ( int i=0; i<5; i++) {
			System.out.print( i + " ");
		}
		System.out.println();
		
		for ( int i=0; i<5; ++i) {
			System.out.print( i + " ");
		}
		System.out.println();

		for ( int i=0; ++i<5;) {
			System.out.print( i + " ");
		}
		System.out.println();

		for ( int i=0; i++<5;) {
			System.out.print( i + " ");
		}
		System.out.println();

	}

}

Das ergibt die Ausgabe
Code:
0 1 2 3 4 
0 1 2 3 4 
1 2 3 4 
1 2 3 4 5
 

Murray

Top Contributor
Titanpharao hat gesagt.:
hm...aber das kommt auch wenn ich zu viel vertikal lesen...aber da macht der weiter?
In beiden Fällen läuft das Programm solange, bis zum ersten Mal die Exception auftritt. Wenn du zuviele Zeilen lesen willst, tritt die ERxception auf, nachdem die letzte gültige Zeile komplett gelesen und ausgegeben worden ist - wenn du die Exception unterdrückst, dann merkst du überhaupt nichts von dem Fehler; die Schleife wird zwar unterbrochen, aber das stört dich in dem Moment ja nicht. Wenn du aber zuviele Spalten lesen willst, tritt der Fehler eben schon am Ende der ersten Zeile auf, so dass die Schleife eben viel früher abgebrochen wird.
 

Murray

Top Contributor
So sollte es gehen:
Code:
import java.io.File;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;


public class JavaExel {

   public static void main(String[] args) {

      try {
         Workbook workbook = Workbook.getWorkbook(new File("test.xls"));
         Sheet sheet = workbook.getSheet(0);
         int cols = sheet.getColumns();
         int rows = sheet.getRows();
          for(int y=0;y<rows;++y){
              for(int x=0;x<cols;++x){
                 Cell zelle=sheet.getCell( x, y);
                 System.out.print(zelle.getContents()+"\t");
              }
              System.out.println();
           }
         workbook.close();
      } catch (Exception e) {
         System.err.println( "Fehler beim Lesen des Workbooks " + workbook + ": " + e.getMessage());
         e.printStackTrace();
      }       
   }
}
 

abollm

Top Contributor
@Titanpharao

Kannst du die MS-Exeldatei nicht einmal hier auf dem Server ablegen, dann man das jeder Interessierte versuchen nachzuvollziehen?

Ich habe mit deinem Code -- ohne jedwede Änderung -- zwei unterschiedliche Excel-Dateien bearbeitet. In einem Fall ging das problemlos, im anderen Fall erhielt ich genau wie du keine Fehlermeldung. Dann habe ich mir daraufhin einmal die Exception näher angesehen (Code wie oben auch von Murray vorgeschlagen entsprechend geändert). Ergebnis:

Code:
jxl.read.biff.BiffException: Unable to recognize OLE stream
	at jxl.read.biff.CompoundFile.<init>(CompoundFile.java:116)
	at jxl.read.biff.File.<init>(File.java:127)
	at jxl.Workbook.getWorkbook(Workbook.java:221)
	at jxl.Workbook.getWorkbook(Workbook.java:198)
	at de.JavaExcel.main(JavaExcel.java:14)

Das ist zwar etwas Anderes als das was du hast, aber deutet ja darauf hin, dass die jxl-Klassen mit bestimmten Excel-Dateien nicht korrekt umgehen können.

Vielleicht hilft es.
 

abollm

Top Contributor
@Titanpharao

Jetzt ist es klar: Man sollte immer vorher sich -- mindestens ein wenig -- mit den jeweiligen Klassen beschäftigt haben.

Es dürfte auch bei dir nun problemlos funktionieren, wenn du den Code wie folgt änderst:

Code:
package de;

import java.io.File;
import jxl.*;

public class JavaExcel {

	public static void main(String[] args) {
		try {
			Workbook workbook = Workbook.getWorkbook(new File("E:\\mytest1.xls"));
			Sheet sheet = workbook.getSheet(0);
			// Anzahl Zeilen und Spalten ermitteln
			int rowNum = sheet.getRows();
			int colNum = sheet.getColumns();
			System.out.println("Anzahl Zeilen im aktuellen Sheet: "+rowNum);
			System.out.println("Anzahl Spalten im aktuellen Sheet: "+colNum+"\n");
			Cell zelle = null;
			for (int i = 0; i < rowNum; i++) {
				for (int j = 0; j < colNum; j++) {
					zelle = sheet.getCell(j, i);
					System.out.print(zelle.getContents() + "\t");
				}
				System.out.println();
			}
			workbook.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

Tja, kleine Ursache ... (-;

[Edit] Aaargh, das Lesen des ganzen Threads hilft. Murray hatte es ja auch schon. Das Problem ist eben, dass man keine leeren Zellen so ausgeben darf.
 

Murray

Top Contributor
abollm hat gesagt.:
Das Problem ist eben, dass man keine leeren Zellen so ausgeben darf.
Das noch viel größere Problem ist eigentlich, dass man die im Gegensatz zu z.B. C (das soll jetzt bitte keinen Flamewar auslösen) enorm mächtige Laufzeitfehlerbehandlung nicht einfach durch eine leeren catch-Block aushebeln sollte - schon mit einem einfachen e.printStackTrace() wäre doch sofort klar gewesen, was da schiefgeht.
 

Murray

Top Contributor
Wildcard hat gesagt.:
Murray hat gesagt.:
[(das soll jetzt bitte keinen Flamewar auslösen)
Das wird kaum möglich sein, diese Tatsache dürfte auch für Hardcore C'ler unstrittig sein.
Aber vielleicht wird der eine oder andere C'ler der Meinung sein, dass man so eine Laufzeitprüfung bei perfekter Programmierung nicht braucht und daher CPU-Zeit für überflüssige Dinge verschwendet wird (aber jetzt fange ich ja selber an damit).
 

abollm

Top Contributor
Murray hat gesagt.:
Das noch viel größere Problem ist eigentlich, dass man die im Gegensatz zu z.B. C (das soll jetzt bitte keinen Flamewar auslösen) enorm mächtige Laufzeitfehlerbehandlung nicht einfach durch eine leeren catch-Block aushebeln sollte - schon mit einem einfachen e.printStackTrace() wäre doch sofort klar gewesen, was da schiefgeht.

Stimmt schon. Allerdings hatte ich ja mit einer meiner zwei Excel-Dateien zuerst die oben von mir gepostete Exception erhalten und dachte deshalb, dass an seiner Excel-Datei (wie bei mir) etwas faul sei. Die Reihenfolge ist sehr wichtig: Erst sorgfältig _alle möglichen/denkbaren Exceptions abfangen, dann Fehlerursache finden/analysieren. Na ja, wie oft wurde das hier schon gepostet und dennoch passiert es einem selbst mitunter mal.
Gerade vor einigen Tagen hatte ich bei einem Kunden ein grob vergleichbares Problem bei einem von mir geschirebenen kleineren Programm:
Die abgefangenen Exceptions hatten die dort aufgetretene Exception (Oracle-spezifisch) nicht abgefangen. Mir war dann nach einer Minute klar, wo ich seinerzeit beim Coden zu faul war. Faulheit rächt sich in der regel immer. Bezüglich Exceptions weist ja jeder bessere Java-Autor auf den sorgfältigen Umgang damit hin. Es kann zur Laufzeit eben alles Mögliche schief gehen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Zrebna Wieso sollte man Null-Prüfungen nicht mit Optional-Objekten nutzen? Allgemeine Java-Themen 13
Zrebna Wieso sind eigentlich JUnit-Tests in src/test/java platziert - nur Konvention? Allgemeine Java-Themen 7
P Wieso benutzen PriorityQueues Heaps? Allgemeine Java-Themen 2
Y Wieso krieg ich die Unit Tests nicht hin Allgemeine Java-Themen 55
I Wieso funktioniert das nich? Allgemeine Java-Themen 5
F Input/Output NullPointerException, aber wieso? [Apache POI] Allgemeine Java-Themen 11
R MAC-Adresse eindeutig für einen PC ? Bezug zu Netzwerk, wieso ? Allgemeine Java-Themen 7
P Best Practice Wieso funktioniert der Modulo - Operator nicht? Allgemeine Java-Themen 2
J Jasper ireport - wieso beendet die Anwendung wenn ich die Preview schließe Allgemeine Java-Themen 1
I Interface Interface / Klasse - wieso Abstract? Allgemeine Java-Themen 13
A Methoden Generische Methode mit Arrays - Source Compatibility 1.7 benötigt, wieso? Allgemeine Java-Themen 3
S RemoteException wieso ? Allgemeine Java-Themen 6
J if else Anweisung macht nicht was es soll. Wieso? Allgemeine Java-Themen 10
P wieso kann ich auf bluej exportieren aber auf eclipse nicht? Allgemeine Java-Themen 2
DEvent Wieso ist Javadoc mit Html Tags? Allgemeine Java-Themen 47
D java.util.InputMismatchException im Scanner -wieso? Allgemeine Java-Themen 5
E Wieso returnt das hier 1? Allgemeine Java-Themen 3
DStrohma [Erledigt] Wieso kann ich Taste 'ENTER' in JTable nicht belegen? Allgemeine Java-Themen 2
C Wieso funktioniert das? Allgemeine Java-Themen 6
W Wieso funktioniert dieser Code hier? Allgemeine Java-Themen 6
S Wieso stehen in der API immer wieder abstrakte Methoden ? Allgemeine Java-Themen 7
lacyuu Schleife hängt sich auf, wieso?? Allgemeine Java-Themen 2
V Wieso meckert FindBugs da? Allgemeine Java-Themen 7
P Wieso HashMap-Zugriff mit Object, statt mit MyObject? Allgemeine Java-Themen 12
V Wieso Heap Space Problem? Allgemeine Java-Themen 14
J Wieso implementiert HTTPServlet Serializable? Allgemeine Java-Themen 2
P Wieso skalieren diese beiden Threads unterschiedlich gut? Allgemeine Java-Themen 16
zilti Wieso geht der StreamReader/Writer nicht? Allgemeine Java-Themen 5
G wieso wird der String des StringBuilder immer länger? Allgemeine Java-Themen 2
G wieso "implements" Allgemeine Java-Themen 13
S Problem mit generics -> ClassCastException und ka wieso Allgemeine Java-Themen 20
G Übergabe funzt nicht, aber wieso? Allgemeine Java-Themen 3
G NullPointer ? wieso? Allgemeine Java-Themen 7
I Wieso läuft Programm bei Kollegen aber nicht bei mir? Allgemeine Java-Themen 10
OnDemand Ram Freigabe erfolgt nicht nach Prozessende Allgemeine Java-Themen 18
G Aktualisierung einer JTable erfolgt nicht zuverlässig Allgemeine Java-Themen 14
K Methoden Ausgabe erfolgt nicht Allgemeine Java-Themen 6
berserkerdq2 Kann keine Labels erstellen, was ist hier syntaktisch falsch Allgemeine Java-Themen 5
berserkerdq2 Labels in IJVM sind keine lokalen Variablen oder? Allgemeine Java-Themen 2
O Warum kann ich so keine Elemente löschen und erhalte einen IllegalStateException? Allgemeine Java-Themen 4
pkm javax.script.ScriptEngineManager gibt mir keine Engine Allgemeine Java-Themen 4
N iText keine Sonderzeichen und Umlaute unter Windows Allgemeine Java-Themen 13
Tobero Eclipse Runnable jar exportiert keine Textures? Allgemeine Java-Themen 12
S createTempFile erstellt keine temporäre Datei Allgemeine Java-Themen 13
O xlsx Datei auslesen mit POI Apache liest keine LEERZELLEN Allgemeine Java-Themen 6
C javax.mail.Message message.setreplyto() null setzen (keine replyto Adresse) Allgemeine Java-Themen 25
Thallius Keine Ahnung Allgemeine Java-Themen 15
M WSDL: Doppelte Typenames (Keine Verwendung möglich) Allgemeine Java-Themen 5
L JPA keine shared primary key Allgemeine Java-Themen 11
M Keine weitere Eingabe in der Main möglich. Eventueller Ansatz über while. Allgemeine Java-Themen 8
P Datenbank-MiniGUI fügt keine Daten ein Allgemeine Java-Themen 4
T Input/Output Konsole gibt trotz printf keine Umlaute aus Allgemeine Java-Themen 17
N Warum habe ich keine Spaltenüberschriften? Allgemeine Java-Themen 6
W Thread sleep 30 sekunden - wenn keine Antwort bis dahin neu senden Allgemeine Java-Themen 2
Thallius Bekomme keine Exception mit Stacktrace mehr. Was habe ich getan? Allgemeine Java-Themen 13
H jid3lib nach schreiben keine Tags im Folder angezeigt Allgemeine Java-Themen 1
0 Code startet nicht (Keine Warnung/Fehlermeldung) Allgemeine Java-Themen 4
A Swing FileWriter schreibt keine Daten in Datei Allgemeine Java-Themen 13
J Programm meldet "Keine Rückmeldung" nach Verbindung zum Server Allgemeine Java-Themen 4
Z Eclipse hängt sich alle paar Sekunden auf (Keine Rückmeldung). Allgemeine Java-Themen 4
Bluedaishi Input/Output Bluetooth Bondrucker MZ220 keine Verbindung Allgemeine Java-Themen 0
F Cardlayout prüfen ob schon vorhanden, keine doppelten Allgemeine Java-Themen 3
R Es gibt keine dummen Fragen (hab ich mal gehört) Allgemeine Java-Themen 11
M Eclipse Keine Ausgabe mehr bei Fehlern Allgemeine Java-Themen 3
S Java Applet Crash - Keine Exception Allgemeine Java-Themen 8
V Files mit Umlauten ergeben keine Größe Allgemeine Java-Themen 9
S Bekomme mit Scanner und URL keine Html-Seite ausgelesen Allgemeine Java-Themen 3
127.0.0.1 Subversion neues SVN Projekt, keine Main gefunden ?! Allgemeine Java-Themen 7
A Collections HashMap.containsKey findet keine immutablen Objekte Allgemeine Java-Themen 3
M keine Bilder in .jar-Datei (java) Allgemeine Java-Themen 23
D Chat - keine Schrift sichtbar Allgemeine Java-Themen 4
J Eclipse Elipse gibt mir keine Vorschläge mehr :( Allgemeine Java-Themen 6
S Objekte die Objekte enthalten: Keine Vererbung Allgemeine Java-Themen 4
S Tomcat java.util.logging - keine Logs Allgemeine Java-Themen 12
Guybrush Threepwood Warten, bis keine Taste gedrückt Allgemeine Java-Themen 11
S Keine NullPointerExceptions in nebenläufigen Threads Allgemeine Java-Themen 21
T Batch-File / keine Verbindung zur DerbyDB Allgemeine Java-Themen 3
O Zugriff auf Serielle Schnittstelle - Keine Ports gefunden. Allgemeine Java-Themen 8
X Warum kann ich keine ZIP Datein mit renameto() in was anderes benennen? Allgemeine Java-Themen 13
B warum keine nested blocks Allgemeine Java-Themen 2
GilbertGrape Jetty-Dienst startet keine Programme mit Oberfläche Allgemeine Java-Themen 2
S Keine Exception-Warning in Eclipse Allgemeine Java-Themen 3
D Warum keine Mehrfachvererbung? Allgemeine Java-Themen 5
tfa Keine Closures in Java 7 (?) Allgemeine Java-Themen 17
J Probleme wenn man keine serialVersionUID definiert? Allgemeine Java-Themen 27
G PrintWriter in .jar erstellt keine Datei Allgemeine Java-Themen 4
F Kann man keine Arrays von generischen Typen erstellen? Allgemeine Java-Themen 2
G Javadoc generiert keine Links zu java.lang Klassen? Allgemeine Java-Themen 4
A ArrayListe :Doppelte entfernen -> keine Referenzen Allgemeine Java-Themen 26
ARadauer Random keine Zahlen doppelt Allgemeine Java-Themen 4
F GregorianCalendar wirft keine Fehler bei z.b. Monat 17 Allgemeine Java-Themen 3
G Jarfile gibt keine Textnachrichten aus Allgemeine Java-Themen 2
J java vnc client verbessern: KeyEvent.VK_ALT keine Wirkung? Allgemeine Java-Themen 12
J jar-Datei enthält keine Main-Class Allgemeine Java-Themen 22
N Keine Klassen startbar/mit Abhängigkeiten erstellbar Allgemeine Java-Themen 2
WMaerz Der neue JDK 6 enthält keine javac.exe, tool.jar usw. Allgemeine Java-Themen 6
P Webhosting-Paket unterstützt nur .war Dateien keine jsp Allgemeine Java-Themen 4
A Kann keine neue Klasse erstellen. Allgemeine Java-Themen 3
D TextPane nach Laden keine Styles Allgemeine Java-Themen 2
A JSP include - keine Fehlermeldung Allgemeine Java-Themen 2

Ähnliche Java Themen


Oben