Ergebnis 1 bis 20 von 20

Thema: Excel Datei in Java öffnen!

  1. #1
    Avatar von VGOo
    VGOo Forenkenner
    Registriert seit
    26.08.2009
    Ort
    Piringsdorf
    Beiträge
    2.199
    Danksagungen
    207

    Standard Excel Datei in Java öffnen!


    So bevor ich hier lange herumrede, werde ich euch mein Problem gleich sagen. Wie der Titel schon sagt, will ich eine Excel Datei in Java öffnen.

    Mit der JExcelApi habe ich es jetzt längere Zeit versucht, es will aber nicht wirklich funktionieren, da ich diesen Fehler bekomme: "Unable to recognize OLE stream"

    Jetzt habe ich mir gerade Apache POI heruntergeladen, da es anscheinend besser und stabiler läuft als die JExcelApi.

    Hat einer von euch Erfahrung mit einer der beiden APIs und könnte mir vielleicht helfen?

    Danke schonmal

  2. #2
    Avatar von pixelflat
    pixelflat Super-Moderator und Deus ex machina
    Registriert seit
    06.03.2007
    Beiträge
    10.837
    Danksagungen
    1.059

    Standard

    JExcelApi kann afaik nur mit alten Excel-Formaten umgehen, also keine xlsx-Dateien.

    POI kann dagegen sicher xlsx schreiben und lesen. Hier ein paar Beispiele: http://poi.apache.org/spreadsheet/qu...dWriteWorkbook

  3. #3
    Avatar von VGOo
    VGOo Forenkenner
    Registriert seit
    26.08.2009
    Ort
    Piringsdorf
    Beiträge
    2.199
    Danksagungen
    207

    Standard

    Und wie binde ich das Apacha POI in Netbeans ein? Ich habe da einen kompletten Ordner von der Seite heruntergeladen, ich weiss aber nicht wirklich wie ich das in Netbeans einbinden soll.

    Es ist mir schon klar wie ich Libraries einbinde, ich kann aber in diesem Ordner keine solche Datei finden.

  4. #4
    Avatar von pixelflat
    pixelflat Super-Moderator und Deus ex machina
    Registriert seit
    06.03.2007
    Beiträge
    10.837
    Danksagungen
    1.059

  5. #5
    Avatar von VGOo
    VGOo Forenkenner
    Registriert seit
    26.08.2009
    Ort
    Piringsdorf
    Beiträge
    2.199
    Danksagungen
    207

    Standard

    Werd ich so mal versuchen, Danke

  6. #6
    Avatar von VGOo
    VGOo Forenkenner
    Registriert seit
    26.08.2009
    Ort
    Piringsdorf
    Beiträge
    2.199
    Danksagungen
    207

    Standard

    Habe mir jetzt mal alles durchgelesen, aber weiss genauso viel wie vorher. Ich weiss auch nicht wirklich was ich mit dem Code anfangen soll.

    Gibts dafür nicht einfach eine Anweisung, die mir einfach die Excel-Tabelle in meinem Programm in einer Tabelle oder einem Textfeld als Tabelle darstellt?

  7. #7
    Avatar von pixelflat
    pixelflat Super-Moderator und Deus ex machina
    Registriert seit
    06.03.2007
    Beiträge
    10.837
    Danksagungen
    1.059

    Standard

    Ne, sowas gibts nicht. Das fängt ja schon damit an, dass nicht jede Excel-Datei gleich ist. Und dann müsstest du auch noch exakt die Darstellungs-Form haben...

    Fang doch erst mal damit an die Daten einzulesen (und auf Konsole auszugeben): http://stackoverflow.com/questions/5...30640#10130640

    Für die Darstellung würde sich eine JTable anbieten: http://www.java-forum.org/bilder-gui...-teil-8-a.html

  8. #8
    Avatar von VGOo
    VGOo Forenkenner
    Registriert seit
    26.08.2009
    Ort
    Piringsdorf
    Beiträge
    2.199
    Danksagungen
    207

    Standard

    Ok danke, ich werds mal so versuchen und wenns so nicht funktionieren will, lass ich mir was anderes einfallen, da ich leider nicht mehr allzu viel Zeit habe

  9. #9
    Avatar von VGOo
    VGOo Forenkenner
    Registriert seit
    26.08.2009
    Ort
    Piringsdorf
    Beiträge
    2.199
    Danksagungen
    207

    Standard

    So Leute, ich steh vor dem nächsten Problem und weiß nicht wirklich wie ich das am effizientesten und schnellsten umsetzen soll.

    Ich hab jz in meinem Programm eine JTable von der ich die eingegebenen Daten lesen will und in ein vorgebenes Excel-Sheet speichern will.

    Hat einer von euch das schon mal gemacht?

    Danke im Vorraus

  10. #10
    Avatar von pixelflat
    pixelflat Super-Moderator und Deus ex machina
    Registriert seit
    06.03.2007
    Beiträge
    10.837
    Danksagungen
    1.059

    Standard

    Wo ist das Problem? An die Daten in der jTable kommst du afaik durch das Model. Also sowas wie:

    Code:
            int columns = jTable1.getModel().getColumnCount();
            int rows = jTable1.getModel().getRowCount();
            
            for(int i=0; i<columns; i++){
                for(int j=0; j<rows; j++){
                    jTable1.getModel().getValueAt(j, i);
                }
            }
    Und da kannst du die Werte auch gleich in deine Excel-Datei schreiben.

  11. #11
    Avatar von VGOo
    VGOo Forenkenner
    Registriert seit
    26.08.2009
    Ort
    Piringsdorf
    Beiträge
    2.199
    Danksagungen
    207

    Standard

    Werd ich so mal versuchen, danke Hätte ich selbst auch draufkommen können.

  12. #12
    Avatar von VGOo
    VGOo Forenkenner
    Registriert seit
    26.08.2009
    Ort
    Piringsdorf
    Beiträge
    2.199
    Danksagungen
    207

    Standard

    So Leute, ich steh leider schon wieder vor einem Problem Ich hab jetzt eine JTable in der ich die Daten manuell eintragen kann und diese Daten will ich 1 zu 1 speichern um diese dann in ein Excelsheet zu schreiben.

    Das mit dem schreiben und lesen des Excelsheet funktioniert tadellos.

    Aber wie bitte komm ich zu den Daten in der JTable und wie kann ich mir die dann speichern.

    Habs jetzt mit dem AbstractTableModel gemacht und über die Methode getValueAt will ich mir die Werte Zelle für Zelle holen. Das Problem ist nur das ich nicht weiß, wie ich in getValueAt ohne einer Variable mit den Daten vorgehen soll

    Ich hoffe einer von euch hat das jetzt verstanden.

  13. #13
    Avatar von pixelflat
    pixelflat Super-Moderator und Deus ex machina
    Registriert seit
    06.03.2007
    Beiträge
    10.837
    Danksagungen
    1.059

    Standard

    getValueAt() lieft ein "Object" zurück, dass du erst in irgendwas casten musst. Sehr wahrscheinlich wird das ein String sein, also:

    Code:
    int columns = jTable1.getModel().getColumnCount();
    int rows = jTable1.getModel().getRowCount();
    
    for(int i=0; i<columns; i++){
     for(int j=0; j<rows; j++){
      String value = (String)jTable1.getModel().getValueAt(j, i);
     }
    }
    Bzw besser:
    Code:
    int columns = jTable1.getModel().getColumnCount();
    int rows = jTable1.getModel().getRowCount();
    
    for(int i=0; i<columns; i++){
     for(int j=0; j<rows; j++){
      Object value = getValueAt(row, col);
      if(value != null && (value instanceof String){
       String text = (String) value;
      }
     }
    }

    Dachte eigentlich da kommst du alleine drauf.

  14. #14
    Avatar von VGOo
    VGOo Forenkenner
    Registriert seit
    26.08.2009
    Ort
    Piringsdorf
    Beiträge
    2.199
    Danksagungen
    207

    Standard

    Meine nicht das, dass hab ich ja schon. Ich hab das Problem mit dem getValueOf() Ding.

    Ich setze meine Tabelle auf das "TableModel" mit:

    table.setModel(new TableModel(data));

    und mein Konstruktor sieht so aus:

    public TableModel(ArrayList<TableData> data){
    this.data=data;
    }

    nur habe ich hier das Problem das zu diesem Zeitpunkt in der ArrayList noch nichts ist, weil ich ja die Daten in die Tabelle einfach so eintrage.

    Meine getValueAt() Methode sieht so aus:


    public Object getValueAt(int rI, int cI){
    TableData p=(data.get(rI));

    int anz=0;
    int i=0;

    switch(cI){

    case 0: return data.get(i).getDailyfee();
    .
    .
    .
    }

    return 0;
    }

    Weißt du was ich meine?

    Wie komme ich zu den Daten, die ich in die Tabelle einlese?

  15. #15
    Avatar von pixelflat
    pixelflat Super-Moderator und Deus ex machina
    Registriert seit
    06.03.2007
    Beiträge
    10.837
    Danksagungen
    1.059

    Standard

    table.getModel().getValueAt()?

    Ansonsten weiß ich nicht was du meinst. An die Daten kommst du immer nur übers Model.

  16. #16
    Avatar von VGOo
    VGOo Forenkenner
    Registriert seit
    26.08.2009
    Ort
    Piringsdorf
    Beiträge
    2.199
    Danksagungen
    207

    Standard

    Ja so rufe ich die Methode auf. Und für den Konstruktor muss ich ja eine ArrayList mitübergeben, oder ist das nicht nötig?

    Ich weiß einfach nicht wie ich die getValueAt()-Methode schreiben soll ohne Daten.


    EDIT (autom. Beitragszusammenführung):


    So meinte ich das: Bei allen Beispielen im Internet wird einfach ein Objekt mitübergeben, dass geht bei mir aber nicht, da ich ja keine Daten habe.

    class SimpleTableModel extends AbstractTableModel {
    public String[] m_colNames = { "A", "B", "C","D", "E" };

    public Class[] m_colTypes = { Integer.class, String.class, String.class, String.class,
    String.class };

    Vector m_macDataVector;

    public SimpleTableModel(Vector macDataVector) {
    super();
    m_macDataVector = macDataVector;
    }
    Geändert von VGOo (23.05.2012 um 20:14 Uhr) Grund: Antwort auf eigenen Beitrag innerhalb von 24 Stunden!

  17. #17
    Avatar von pixelflat
    pixelflat Super-Moderator und Deus ex machina
    Registriert seit
    06.03.2007
    Beiträge
    10.837
    Danksagungen
    1.059

    Standard

    Achso. Na dann übergieb doch einfach eine leere ArrayList (wenn das deine gewählte Datenstruktur ist)?

  18. #18
    Avatar von VGOo
    VGOo Forenkenner
    Registriert seit
    26.08.2009
    Ort
    Piringsdorf
    Beiträge
    2.199
    Danksagungen
    207

    Standard

    Das funktioniert eben nicht, da wirft er mir eine IndexOutOfBoundException oder eine NullPointException

  19. #19
    Avatar von VGOo
    VGOo Forenkenner
    Registriert seit
    26.08.2009
    Ort
    Piringsdorf
    Beiträge
    2.199
    Danksagungen
    207

    Standard

    So, ich steh wieder vor einem Problem und ich hoffe auch, dass es das letzte ist.

    Also, ich hab jetzt mein TableModel soweit fertig. Hier ist der Code:

    /*
    * To change this template, choose Tools | Templates
    * and open the template in the editor.
    */
    package reiseverrechnung;

    import java.util.ArrayList;
    import javax.swing.table.AbstractTableModel;

    /**
    *
    * @author Balti
    */
    public class TableModel extends AbstractTableModel {

    private static final long serialVersionUID = 1L;
    String[] headers = {};
    //TableData [][] data; //Daten der Tabelle
    ArrayList <TableData> list=new ArrayList <TableData>();
    TableData data;



    public TableModel() {
    for (int i = 0; i < 17; i++) {
    data=new TableData();
    data.setTypefeeclaim(null);
    data.setDistancetraveled(0);
    data.setTravelcosts(0);
    data.setDailyfee(0);
    data.setOvernightcosts(0);
    data.setOthercosts(0);
    data.setSum(0);

    list.add(data);
    }


    }

    public int getRowCount() {
    return 17;
    }

    public int getColumnCount() {
    return 7;
    }

    @Override
    public String getColumnName(int column){
    String[] tab=new String []{"Art des Gebührenanspruches","Entfernung in Gesamt-km",
    "Reisekosten", "Tagesgebühr", "Nächtigungsgebühr", "sonstige Nebenkosten", "Summe"};
    return tab[column];
    }

    @Override
    public boolean isCellEditable(int row, int column)
    {
    return true;
    }



    public Object getValueAt(int rowIndex, int columnIndex) {
    switch (columnIndex) {
    case 0:
    return list.get(rowIndex).getTypefeeclaim();
    case 1:
    return list.get(rowIndex).getDistancetraveled();
    case 2:
    return list.get(rowIndex).getTravelcosts();
    case 3:
    return list.get(rowIndex).getDailyfee();
    case 4:
    return list.get(rowIndex).getOvernightcosts();
    case 5:
    return list.get(rowIndex).getOthercosts();
    case 6:
    return list.get(rowIndex).getSum();

    default: return "Error";
    }
    }


    @Override
    public Class getColumnClass(int cI) {
    if (cI == 0) {
    return String.class;
    } else {
    if (cI == 1) {
    return Integer.class;
    } else {
    if (cI == 2) {
    return Integer.class;
    } else {
    if (cI == 3) {
    return Integer.class;
    } else {
    if(cI==4){
    return Integer.class;
    } else {
    if(cI==5){
    return Integer.class;
    }
    else {
    if(cI==6) {
    return Integer.class;
    }
    }
    }
    return String.class;
    }
    }
    }
    }
    }

    @Override
    public void setValueAt(Object aValue,int rowIndex, int columnIndex){
    switch (columnIndex) {

    case 0:
    list.get(rowIndex).setTypefeeclaim(String.valueOf( aValue.toString()));
    break;
    case 1:
    list.get(rowIndex).setDistancetraveled(Integer.val ueOf(aValue.toString()));
    break;
    case 2:
    list.get(rowIndex).setTravelcosts(Integer.valueOf( aValue.toString()));
    break;
    case 3:
    list.get(rowIndex).setDailyfee(Integer.valueOf(aVa lue.toString()));
    break;
    case 4:
    list.get(rowIndex).setOvernightcosts(Integer.value Of(aValue.toString()));
    break;
    case 5:
    list.get(rowIndex).setOthercosts(Integer.valueOf(a Value.toString()));
    break;
    case 6:
    list.get(rowIndex).setSum(Integer.valueOf(aValue.t oString()));
    break;

    }

    fireTableDataChanged();

    }


    public ArrayList<TableData> getChanges(){
    System.out.println(list);
    return list;
    }
    }



    Ich hab jetzt nur noch das Problem, dass mir wenn ich die getChanges Methode im Mainprogramm aufrufe, immer nur null oder 0 zurückgibt.


    Weiß einer von euch weiter?

  20. #20
    Avatar von VGOo
    VGOo Forenkenner
    Registriert seit
    26.08.2009
    Ort
    Piringsdorf
    Beiträge
    2.199
    Danksagungen
    207

    Standard

    Hat keiner eine Ahnung?

Um auf dieses Thema zu ANTWORTEN bitte sich zuerst » hier kostenlos registrieren!!
Neue Frage stellen?
Kurze Zusammenfassung der Frage:

Ähnliche Themen

  1. MSG Datei durch IE OHNE Nachfrage öffnen
    Von pakito92 im Forum Windows Programme und Apps
    Antworten: 0
    Letzter Beitrag: 08.03.2012, 12:41
  2. Excel Dateien lassen sich nicht öffnen
    Von mmosuchti im Forum Windows Programme und Apps
    Antworten: 1
    Letzter Beitrag: 25.11.2011, 00:43
  3. Datei öffnen = Absturz
    Von GrÜnE BrIlLe im Forum Windows Programme und Apps
    Antworten: 2
    Letzter Beitrag: 27.09.2009, 19:44
  4. doc datei geht nicht öffnen
    Von Unger02 im Forum Windows Programme und Apps
    Antworten: 1
    Letzter Beitrag: 16.06.2009, 14:38
  5. VP6 Datei öffnen? aber wie
    Von exchange im Forum Multimedia
    Antworten: 1
    Letzter Beitrag: 14.06.2009, 17:52

Stichworte