Mehrdimensionale Abfrage

didi577

Bekanntes Mitglied
HI,

ich möchte über eine GUI Daten aus einer MySQL nach Excel übergeben. Ich versuche mich zum ersten mal darin.

Java:
public void termineDrucken(ActionEvent event) {

        ObservableList<Mitarbeiter> selektierteMitarbeiter = lvFachberater.getSelectionModel().getSelectedItems();

        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet sheet = workbook.createSheet("TABELLE1");
        XSSFRow rowhead = sheet.createRow(0);


        try (PreparedStatement pstXlsTv30 = con1.prepareStatement(
                "SELECT SUM(w.tage) AS sumEmpVjServicetage FROM myteam.servicetage_woche w WHERE w.mitarbeiter =? AND w.jahr =?");) {

            for (int i = 0; i < selektierteMitarbeiter.size(); i++) {

                rowhead.createCell(0).setCellValue("");
                rowhead.createCell(i + 1).setCellValue(selektierteMitarbeiter.get(i).getVorname());
                sheet.setColumnWidth(0, 2000);
                sheet.setColumnWidth(i + 1, 3000);

                pstXlsTv30.setInt(1, selektierteMitarbeiter.get(i).getMitarbeiter_id());
                pstXlsTv30.setInt(2, 2018);

                try (ResultSet rs = pstXlsTv30.executeQuery();) {

                    int j = 1;

                    while (rs.next()) {

                        XSSFRow row = sheet.createRow(j);
                        row.createCell(0).setCellValue("2018");
                        row.createCell(i).setCellValue(rs.getString("sumEmpVjServicetage"));

                        j++;

                    }

                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            String kundentickets = "c:/temp/kunden.xlsx";
            FileOutputStream fileOut = new FileOutputStream(kundentickets);
            workbook.write(fileOut);
            fileOut.close();

            Desktop.getDesktop().open(new File(kundentickets));

        } catch (IOException e1) {
            e1.printStackTrace();
        } catch (SQLException e2) {
            // TODO Auto-generated catch block
            e2.printStackTrace();
        }


    }

}

Die Spalten werden dynamisch je markierter Anzahl erzeugt, aber die Zeilen nicht. Er fragt nur die Werte nur für einen Datensatz ab. Ich gehe davon aus, das die Datenbankabfrage auch noch in Schleife muss um mir in jede Spalte einen Wert zu schreiben.

Das ist das Ergebnis bei drei markierten Personen:
ClaudiusMirkoRonny
201836

Das soll aber das Ergebnis sein:
ClaudiusMirkoRonny
2018
16​
29​
36​

Wer kann mir helfen ??
 
K

kneitzel

Gast
Du erzeugst in der Schleife für die Mitarbeiter jedes Mal eine neue Zeile. Aber die Mitarbeiter stehen ja in einer Zeile, d.h. du musst da nicht mehr neue Zeilen erzeugen. Die Zeile musst Du außerhalb einmal erzeugen und einmal die 2018 zuweisen. Dann füllst Du ansonsten nur noch die Werte der Mitarbeiter nach dem Lesen in die Zeile.
 
K

kneitzel

Gast
Der Part hat doch schon funktioniert so wie die Ausgabe zeigt. Es geht nur um Deine Schleife speziell um den Part
Java:
                        XSSFRow row = sheet.createRow(j);
                        row.createCell(0).setCellValue("2018");
                        row.createCell(i).setCellValue(rs.getString("sumEmpVjServicetage"));

Du musst natürlich die Zeile für das Jahr nur einmal anlegen, nachdem Du die Kopfzeile erzeugt hast.
Und da wo der Code steht musst du in der erzeugten Spalte dann das entsprechende Element setzen.
 

didi577

Bekanntes Mitglied
ich habe jetzt folgende Lösung die auch funktioniert:

Java:
public void termineDrucken(ActionEvent event) {

        ObservableList<Mitarbeiter> selektierteMitarbeiter = lvFachberater.getSelectionModel().getSelectedItems();

        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet sheet = workbook.createSheet("TABELLE1");
        XSSFRow rowhead = sheet.createRow(0);
        rowhead.createCell(0).setCellValue("");
        XSSFRow row = sheet.createRow(1);

        sheet.setColumnWidth(0, 2000);

        try (PreparedStatement pstXlsTv30 = con1.prepareStatement(
                "SELECT SUM(w.tage) AS sumEmpVjServicetage FROM myteam.servicetage_woche w WHERE w.mitarbeiter =? AND w.jahr =?");) {

            for (int i = 0; i < selektierteMitarbeiter.size(); i++) {

                rowhead.createCell(i + 1).setCellValue(selektierteMitarbeiter.get(i).getVorname());
                sheet.setColumnWidth(i + 1, 3000);

                pstXlsTv30.setInt(1, selektierteMitarbeiter.get(i).getMitarbeiter_id());
                pstXlsTv30.setInt(2, 2018);

                try (ResultSet rs = pstXlsTv30.executeQuery();) {

                    while (rs.next()) {
                        row.createCell(0).setCellValue("2018");
                        row.createCell(i + 1).setCellValue(rs.getString("sumEmpVjServicetage"));

                    }

                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            String kundentickets = "c:/temp/kunden.xlsx";
            FileOutputStream fileOut = new FileOutputStream(kundentickets);
            workbook.write(fileOut);
            fileOut.close();

            Desktop.getDesktop().open(new File(kundentickets));

        } catch (IOException e1) {
            e1.printStackTrace();
        } catch (SQLException e2) {
            // TODO Auto-generated catch block
            e2.printStackTrace();
        }

    }

vielen Dank für deine Hilfe:)
 
K

kneitzel

Gast
Wenn es so schon funktioniert, dann ist das super.

Ich würde da nur ein paar Dinge etwas umstellen, da derzeit ein paar Zellen mehrfach erzeugt werden.
Meine Idee wäre mehr wie folgt gewesen:
Java:
        ObservableList<Mitarbeiter> selektierteMitarbeiter = lvFachberater.getSelectionModel().getSelectedItems();

        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet sheet = workbook.createSheet("TABELLE1");
        XSSFRow rowhead = sheet.createRow(0);
        rowhead.createCell(0).setCellValue("");
        
        // Zeile für Werte erzeugen, Jahr schreiben und Breite erste Spalte setzen.
        XSSFRow row = sheet.createRow(1);
        row.createCell(0).setCellValue("2018");
        sheet.setColumnWidth(0, 2000);

        // Einmaliges Anlegen der Zellen, die notwendig sind
        for (int i = 0; i < selektierteMitarbeiter.size(); i++) {
            rowhead.createCell(i + 1).setCellValue(selektierteMitarbeiter.get(i).getVorname());
            sheet.setColumnWidth(i + 1, 3000);
        }
        
        try (PreparedStatement pstXlsTv30 = con1.prepareStatement(
                "SELECT SUM(w.tage) AS sumEmpVjServicetage FROM myteam.servicetage_woche w WHERE w.mitarbeiter =? AND w.jahr =?");) {

            for (int i = 0; i < selektierteMitarbeiter.size(); i++) {

                pstXlsTv30.setInt(1, selektierteMitarbeiter.get(i).getMitarbeiter_id());
                pstXlsTv30.setInt(2, 2018);

                try (ResultSet rs = pstXlsTv30.executeQuery();) {

                    while (rs.next()) {
                        row.createCell(i + 1).setCellValue(rs.getString("sumEmpVjServicetage"));

                    }

                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            String kundentickets = "c:/temp/kunden.xlsx";
            FileOutputStream fileOut = new FileOutputStream(kundentickets);
            workbook.write(fileOut);
            fileOut.close();

            Desktop.getDesktop().open(new File(kundentickets));

        } catch (IOException e1) {
            e1.printStackTrace();
        } catch (SQLException e2) {
            // TODO Auto-generated catch block
            e2.printStackTrace();
        }

    }

Wie Du erkennst: Ich habe absolut keinen neuen Code hinzugefügt, sondern es nur ein kleines bisschen umgestellt.

So wird jetzt jede Zelle mit Mitarbeiternamen nur einmal geschrieben und auch das Jahr wird nur einmal geschrieben.
 

didi577

Bekanntes Mitglied
vielen Dank, wieder was gelernt :), ich werde mich wahrscheinlich nochmal melden da ich die Jahre auch noch dynamisch ausgeben will, es soll die Möglichkeit geben vonJahr bisJahr auszugeben also die Werte von 2017 bis 2019 zB, das wird in der GUI dann über zwei Comboboxen möglich sein
 
K

kneitzel

Gast
Mehre Jahre lassen sich da einfach einbinden:
Code:
        ObservableList<Mitarbeiter> selektierteMitarbeiter = lvFachberater.getSelectionModel().getSelectedItems();

        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet sheet = workbook.createSheet("TABELLE1");
        XSSFRow rowhead = sheet.createRow(0);
        rowhead.createCell(0).setCellValue("");
        
        // Einmaliges Anlegen der Zellen, die notwendig sind
        for (int i = 0; i < selektierteMitarbeiter.size(); i++) {
            rowhead.createCell(i + 1).setCellValue(selektierteMitarbeiter.get(i).getVorname());
            sheet.setColumnWidth(i + 1, 3000);
        }

        for (int year=2000; year<=2018; year++) {
            // Zeile für Werte erzeugen, Jahr schreiben und Breite erste Spalte setzen.
            XSSFRow row = sheet.createRow(1);
            row.createCell(0).setCellValue(""+year);
            sheet.setColumnWidth(0, 2000);

            try (PreparedStatement pstXlsTv30 = con1.prepareStatement(
                "SELECT SUM(w.tage) AS sumEmpVjServicetage FROM myteam.servicetage_woche w WHERE w.mitarbeiter =? AND w.jahr =?");) {

                for (int i = 0; i < selektierteMitarbeiter.size(); i++) {

                    pstXlsTv30.setInt(1, selektierteMitarbeiter.get(i).getMitarbeiter_id());
                    pstXlsTv30.setInt(2, year);

                    try (ResultSet rs = pstXlsTv30.executeQuery();) {

                        while (rs.next()) {
                                row.createCell(i + 1).setCellValue(rs.getString("sumEmpVjServicetage"));
                        }

                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            } catch (IOException e1) {
                e1.printStackTrace();
            } catch (SQLException e2) {
                // TODO Auto-generated catch block
                e2.printStackTrace();
            }
        
            // Hier müssen evtl. noch ein paar Exceptions behandelt werden ...
            String kundentickets = "c:/temp/kunden.xlsx";
            FileOutputStream fileOut = new FileOutputStream(kundentickets);
            workbook.write(fileOut);
            fileOut.close();
            Desktop.getDesktop().open(new File(kundentickets));
        }
    }

Halt etwas in der Art ... aber ist natürlich nicht ausgetestet und ich weiss jetzt nicht, ob da am Ende noch Exceptions gefangen werden müssen oder so ... Und ich hoffe, bei dem Copy&Paste mit Einrücken habe ich nichts übersehen. So ohne IDE ist es teilweise nicht ganz so leicht :)
 

didi577

Bekanntes Mitglied
Moin. Irgendwo hängt es noch. Ich habe jetzt diesen Code:
Java:
public void termineDrucken(ActionEvent event) throws IOException {

          ObservableList<Mitarbeiter> selektierteMitarbeiter = lvFachberater.getSelectionModel().getSelectedItems();

            XSSFWorkbook workbook = new XSSFWorkbook();
            XSSFSheet sheet = workbook.createSheet("TABELLE1");
            XSSFRow rowhead = sheet.createRow(0);
            rowhead.createCell(0).setCellValue("");
            
            // Einmaliges Anlegen der Zellen, die notwendig sind
            for (int i = 0; i < selektierteMitarbeiter.size(); i++) {
                rowhead.createCell(i + 1).setCellValue(selektierteMitarbeiter.get(i).getVorname());
                sheet.setColumnWidth(i + 1, 3000);
            }

            for (int year=2000; year<=2018; year++) {
                // Zeile für Werte erzeugen, Jahr schreiben und Breite erste Spalte setzen.
                XSSFRow row = sheet.createRow(1);
                row.createCell(0).setCellValue(""+year);
                sheet.setColumnWidth(0, 2000);

                try (PreparedStatement pstXlsTv30 = con1.prepareStatement(
                    "SELECT SUM(w.tage) AS sumEmpVjServicetage FROM myteam.servicetage_woche w WHERE w.mitarbeiter =? AND w.jahr =?");) {

                    for (int i = 0; i < selektierteMitarbeiter.size(); i++) {

                        pstXlsTv30.setInt(1, selektierteMitarbeiter.get(i).getMitarbeiter_id());
                        pstXlsTv30.setInt(2, year);

                        try (ResultSet rs = pstXlsTv30.executeQuery();) {

                            while (rs.next()) {
                                    row.createCell(i + 1).setCellValue(rs.getString("sumEmpVjServicetage"));
                            }

                        } catch (SQLException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                } catch (SQLException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                } 
            
                // Hier müssen evtl. noch ein paar Exceptions behandelt werden ...
                String kundentickets = "c:/temp/kunden.xlsx";
                FileOutputStream fileOut = new FileOutputStream(kundentickets);
                workbook.write(fileOut);
                fileOut.close();
                Desktop.getDesktop().open(new File(kundentickets));
            }
        }

es fliegt eine Exception:

xception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1774)
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Node.fireEvent(Node.java:8411)
at javafx.scene.control.Button.fire(Button.java:185)
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3757)
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:394)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$358(GlassViewEventHandler.java:432)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:431)
at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
at com.sun.glass.ui.View.notifyMouse(View.java:937)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$152(WinApplication.java:177)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.reflect.misc.Trampoline.invoke(Unknown Source)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.reflect.misc.MethodUtil.invoke(Unknown Source)
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769)
... 48 more
Caused by: java.io.FileNotFoundException: c:\temp\kunden.xlsx (Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at controller.UebersichtTermineViewController.termineDrucken(UebersichtTermineViewController.java:162)
... 58 more

und das istr das Ergebnis:
AnnikaClaudiusMirko
2000
 
K

kneitzel

Gast
Die wichtige Meldung ist am Ende:
Caused by: java.io.FileNotFoundException: c:\temp\kunden.xlsx (Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird)

Beim Versuch, das Excel-Sheet zu schreiben, kann er auf die Datei nicht zugreifen, da die Datei bereits geöffnet ist. Hast Du die Datei evtl. noch geöffnet? Also evtl. noch Excel offen oder so?
 

thecain

Top Contributor
im Loop wird die Datei geöffnet. Das darf erst danach passieren.

also diese Zeile: Desktop.getDesktop().open(new File(kundentickets)); muss aus dem for-loop
 
K

kneitzel

Gast
im Loop wird die Datei geöffnet. Das darf erst danach passieren.

also diese Zeile: Desktop.getDesktop().open(new File(kundentickets)); muss aus dem for-loop
Ich würde auch die Zeilen davor ab dem // Hier müssen evtl. noch ein paar Exceptions behandelt werden ... aus der Loop raus nehmen. Im Editor hier im Forum muss ich die Einrückebenen falsch gesehen haben. Aber der Block schreibt die Datei und das macht erst Sinn nachdem die Daten komplett vorbereitet wurden.
 

didi577

Bekanntes Mitglied
habe es so angepasst:

Java:
public void termineDrucken(ActionEvent event) throws IOException {

        ObservableList<Mitarbeiter> selektierteMitarbeiter = lvFachberater.getSelectionModel().getSelectedItems();

        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet sheet = workbook.createSheet("TABELLE1");
        XSSFRow rowhead = sheet.createRow(0);
        rowhead.createCell(0).setCellValue("");

        // Einmaliges Anlegen der Zellen, die notwendig sind
        for (int i = 0; i < selektierteMitarbeiter.size(); i++) {
            rowhead.createCell(i + 1).setCellValue(selektierteMitarbeiter.get(i).getVorname());
            sheet.setColumnWidth(i + 1, 3000);
        }

        for (int year = 2000; year <= 2018; year++) {
            // Zeile für Werte erzeugen, Jahr schreiben und Breite erste Spalte setzen.
            XSSFRow row = sheet.createRow(1);
            row.createCell(0).setCellValue("" + year);
            sheet.setColumnWidth(0, 2000);

            try (PreparedStatement pstXlsTv30 = con1.prepareStatement(
                    "SELECT SUM(w.tage) AS sumEmpVjServicetage FROM myteam.servicetage_woche w WHERE w.mitarbeiter =? AND w.jahr =?");) {

                for (int i = 0; i < selektierteMitarbeiter.size(); i++) {

                    pstXlsTv30.setInt(1, selektierteMitarbeiter.get(i).getMitarbeiter_id());
                    pstXlsTv30.setInt(2, year);

                    try (ResultSet rs = pstXlsTv30.executeQuery();) {

                        while (rs.next()) {
                            row.createCell(i + 1).setCellValue(rs.getString("sumEmpVjServicetage"));
                        }

                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            } catch (SQLException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }

        }

        // Hier müssen evtl. noch ein paar Exceptions behandelt werden ...
        String kundentickets = "c:/temp/kunden.xlsx";
        FileOutputStream fileOut = new FileOutputStream(kundentickets);
        workbook.write(fileOut);
        fileOut.close();
        Desktop.getDesktop().open(new File(kundentickets));
    }

keine Fehler mehr aber das Ergebnis passt noch nicht
AnnikaClaudiusMirko
201861629
es wird nur das letzte Jahr ausgegeben
er müsste doch mit 2000 beginnen und dann weitere Zeilen mit den Werten bis 2018 ausgeben ?
 
K

kneitzel

Gast
Sorry, habe halt selbst keinen Code hier, den ich testen könnte. Dadurch das herantasten...

Problem jetzt ist das XSSFRow row = sheet.createRow(1);
Da legst Du immer die Zeile 1 neu an.

Das muss natürlich Zeile 1 ... n sein. Also entweder eine Variable rowNumber einfügen, die du hoch zählst (was ich für gut lesbar halten würde) oder eben aus der for schleife ableiten:
XSSFRow row = sheet.createRow(year - 2000 + 1);
Das Letztere ist dann etwas weniger Code, aber sobald die For-Schleife anpasst, dann darfst Du nicht vergessen, den Code da auch noch anzupassen. Daher dann evtl. noch in der Klasse Konstanten definieren final int START_YEAR = 2000; final int END_YEAR=2018; und dann statt den Zahlen die Konstanten benutzen.
 

didi577

Bekanntes Mitglied
perfekt...passt...ich dachte mir schon dass es daran liegt (1), hatte nur keine Lösung

jetzt läuft es so wie es wollte

vielen vielen Dank :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Mehrdimensionale ArrayList mischen Allgemeine Java-Themen 10
F mehrdimensionale Arrays Allgemeine Java-Themen 4
E ArrayIndexOutOfBounds - mehrdimensionale Arrays Allgemeine Java-Themen 6
Meldanor Mehrdimensionale Arrays : Zugriff auf n-tes Array Allgemeine Java-Themen 5
D Mehrdimensionale HashMaps Allgemeine Java-Themen 6
S Mehrdimensionale Arrays Vergleichen Allgemeine Java-Themen 2
B Mehrdimensionale Array Allgemeine Java-Themen 7
B Wie erstelle ich dazu eine Abfrage ob der Button gedrückt wurde? Allgemeine Java-Themen 8
J Mehrfache if-else-Abfrage zusammenfassen Allgemeine Java-Themen 51
L 2 Dimensionale ListArray Abfrage nach einem Wert suchen Allgemeine Java-Themen 5
I Wie kann ich den Wert aus einer If abfrage ausgeben Allgemeine Java-Themen 23
Zeppi NullPointerException in einer if-Abfrage Allgemeine Java-Themen 6
1Raini Java if-Abfrage funktioniert nicht! Allgemeine Java-Themen 3
tom.j85 Exception bei Abfrage von Ländercodes in API? Allgemeine Java-Themen 13
T Fehler bei IF abfrage Allgemeine Java-Themen 8
MiMa If-Abfrage mit Parameter Allgemeine Java-Themen 8
kodela Binäre Abfrage Allgemeine Java-Themen 12
D MAC Adressen Abfrage Allgemeine Java-Themen 5
J Problem bei Hashmap Key-Abfrage Allgemeine Java-Themen 4
B Swing Hilfe bei Abfrage von Benutzernamen und Passwort Allgemeine Java-Themen 2
J If Abfrage funktioniert nicht Allgemeine Java-Themen 4
B Java Abfrage Netzbetrieb oder Akkubetrieb Allgemeine Java-Themen 1
T Login-Abfrage Allgemeine Java-Themen 3
T Login mit LDAP-Abfrage Allgemeine Java-Themen 3
M Event Handling Tastatur abfrage Allgemeine Java-Themen 5
2 If-Abfrage um Uhrzeit einzuordnen Allgemeine Java-Themen 2
F Java ip abfrage mit Dateiausgabe ? Allgemeine Java-Themen 2
V Java Editor Problem mit ! bei if-Abfrage Allgemeine Java-Themen 5
N Schlüsselworte if abfrage ob linke oder rechte maustaste gedrückt ist Allgemeine Java-Themen 5
H args abfrage vereinfachen Allgemeine Java-Themen 7
P Tastatur abfrage ohne KeyListener Allgemeine Java-Themen 3
E Methoden Server Benutzer abfrage Allgemeine Java-Themen 2
D Internet Abfrage aber mit Warteschleife Allgemeine Java-Themen 6
B Kapselung if-Abfrage bei "MVC-verteilten" Listenern Allgemeine Java-Themen 5
R JNI if abfrage gibt immer false zurück. Allgemeine Java-Themen 7
S if-Abfrage Allgemeine Java-Themen 5
T Wiederholte Abfrage? Allgemeine Java-Themen 5
B abfrage ob file ausgeführt wurde Allgemeine Java-Themen 4
Z Boolean Abfrage gibt kein Boolean zurück, aber warum? Allgemeine Java-Themen 6
P Google Abfrage auslesen Allgemeine Java-Themen 2
MQue Performance Methodenaufruf - if Abfrage Allgemeine Java-Themen 19
W ICQ Status Abfrage mit Java Allgemeine Java-Themen 3
M if - else Abfrage beenden Allgemeine Java-Themen 4
MQue if- Abfrage Allgemeine Java-Themen 4
B Abfrage ob JRE installiert ist, JAR automatisch starten Allgemeine Java-Themen 5
MQue if Abfrage Allgemeine Java-Themen 27
MQue if- Abfrage Allgemeine Java-Themen 26
C Versionsstring Abfrage Allgemeine Java-Themen 7
G Tastatur abfrage Allgemeine Java-Themen 8
D Doppeltverschachtelte if-Abfrage Allgemeine Java-Themen 10
Z mit java htaccess - abfrage bestätigen/umgehen Allgemeine Java-Themen 2
U if Abfrage macht etwas falsch Allgemeine Java-Themen 2
G Problem mit if-Abfrage bei Benutzeingabe Allgemeine Java-Themen 2
P Java Acces Datenbank Problem ! (Brauche eine Abfrage) Allgemeine Java-Themen 5
K Abfrage ob JRE oder JDK auf System installiert ist. Allgemeine Java-Themen 12
T IF Abfrage + YES_NO Option mittels JOptionPane Allgemeine Java-Themen 3
U IF-Abfrage Allgemeine Java-Themen 17
H Java-Abfrage Allgemeine Java-Themen 9
A FileChooser Datei-Überschreiben Abfrage Allgemeine Java-Themen 2
F Java Passwort abfrage Allgemeine Java-Themen 2
S CDDB-Abfrage mit Java unter Linux? Allgemeine Java-Themen 4
L Datenbank Abfrage (Felder&Tabelle nicht fix) in ArrayLis Allgemeine Java-Themen 4
S Integer-splitten für Abfrage. Allgemeine Java-Themen 4
G Abfrage in datenbank Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben