Einen schönen Sonntag euch allen,
ich hänge gerade mal wieder, wahrscheinlich an einer Kleinigkeit und komme nicht auf die Lösung.
Folgender Code, soll die Ausgabe eines JTables in eine Excel steuern.
In der Variablen hRow wird die jeweilige Reihe der Liste gespeichert.
Unter dem Kommentar // Liste werden die einzelnen Reihen erstellt. hRow wird bei jedem Schleifendurchlauf neu referenziert, da immer die nächste Reihe erstellt wird (i+1).
Das füllen der Liste funktioniert auch tadellos.
Bei der Bestimmung der Zeilenfarbe kommt es zum Problem.
Alle Zeilen werden bei der Ausgabe der Excel in der Fabre der letzten Zeile gefärbt.
Ist also der Status der letzten Zeile beispielsweise "Teillieferung", werden alle Zeilen der Tabelle rot eingefärbt.
Die Styles der anderen Zeilen werden also irgendwie überschrieben mit den Informationen aus der letzten Zeile.
Im Switch Statement sind alle break; Anweisungen gesetzt.
Das ist wie die Suche nach der Nadel im Heuhaufen :-(
Evtl. sieht ein erfahrenerer Kollege den Fehler sofort.
vielen Dank für eure Unterstützung
ich hänge gerade mal wieder, wahrscheinlich an einer Kleinigkeit und komme nicht auf die Lösung.
Folgender Code, soll die Ausgabe eines JTables in eine Excel steuern.
In der Variablen hRow wird die jeweilige Reihe der Liste gespeichert.
Unter dem Kommentar // Liste werden die einzelnen Reihen erstellt. hRow wird bei jedem Schleifendurchlauf neu referenziert, da immer die nächste Reihe erstellt wird (i+1).
Das füllen der Liste funktioniert auch tadellos.
Bei der Bestimmung der Zeilenfarbe kommt es zum Problem.
Alle Zeilen werden bei der Ausgabe der Excel in der Fabre der letzten Zeile gefärbt.
Ist also der Status der letzten Zeile beispielsweise "Teillieferung", werden alle Zeilen der Tabelle rot eingefärbt.
Die Styles der anderen Zeilen werden also irgendwie überschrieben mit den Informationen aus der letzten Zeile.
Im Switch Statement sind alle break; Anweisungen gesetzt.
Das ist wie die Suche nach der Nadel im Heuhaufen :-(
Evtl. sieht ein erfahrenerer Kollege den Fehler sofort.
vielen Dank für eure Unterstützung
Code:
public static void writer (JTable table) throws IOException {
JFileChooser save = new JFileChooser();
save.setDialogTitle("Save as...");
save.setFileFilter(new FileNameExtensionFilter ("xlsx", "xls", "xlsm"));
int choose = save.showSaveDialog(null);
if (choose == JFileChooser.APPROVE_OPTION) {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet ("Gartner Lagerliste");
//try
TableModel model = table.getModel();
TableColumnModel column = table.getColumnModel();
XSSFCellStyle style = workbook.createCellStyle();
//Header
XSSFRow row = sheet.createRow(0);
XSSFRow hRow;
for (int c=0; c<model.getColumnCount(); c++) {
XSSFCell cell = row.createCell(c);
cell.setCellValue(column.getColumn(c).getHeaderValue().toString());
}
//Liste
for (int i=0; i<model.getRowCount(); i++) {
hRow = sheet.createRow(i+1);
// Zeile wird mit Daten gefüllt
for (int j=0; j<model.getColumnCount(); j++) {
XSSFCell cell = hRow.createCell(j, CellType.STRING);
cell.setCellValue(model.getValueAt(i, j).toString());
}
//Zeilenfarbe wird bestimmt
String status = workbook.getSheetAt(0).getRow(i+1).getCell(11).toString();
switch (status) {
case "Komplettlieferung" :
style.setFillForegroundColor (IndexedColors.YELLOW.getIndex());
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
break;
case "Teillieferung" :
style.setFillForegroundColor (IndexedColors.RED.getIndex());
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
break;
case "nicht prüfbar" :
style.setFillForegroundColor (IndexedColors.AQUA.getIndex());
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
break;
case "ausgeliefert" :
style.setFillForegroundColor (IndexedColors.GREEN.getIndex());
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
break;
}
for (int c=0; c<model.getColumnCount(); c++) {
hRow.getCell(c).setCellStyle(style);
}
}
FileOutputStream FOS = new FileOutputStream (save.getSelectedFile()+".xlsx");
BufferedOutputStream bos = new BufferedOutputStream (FOS);
workbook.write(bos);
bos.close();
FOS.close();
}