Probleme mit POI / OO


seppo05

Grünschnabel
Hallo,

hab hier ein Problem mit der Jakarta POI Lib bzw. eigentlich mehr mit Java und der Objektorientierung. Ich möchte gerne eine Excel-Datei schreiben, komme aber mit den einfachen Beispielen aus der POI-Dokumentation nicht weiter. Mein konkreter (gekürzter) Quellcode:

Java:
public class XLS_Test {
private HSSFWorkbook wb = new HSSFWorkbook();
private HSSFSheet sheet = wb.createSheet("Testblatt");

public void createFile() {
// CODE
  wb.write(fileOut);
// CODE
}

private void generateCaptionCells {
  HSSFRow row = sheet.createRow((short)0);
  for(i=0;i<maxSize;i++) {
    row.createCell(i).setCellValue(curElement.getValue());
  }
}
}

Ich habe verschiedene Funktionen wie z.b. die "generateCaptionCells", die mir meine einzelnen Zellen mit Werten befüllen. Zum Schluss wird dann in der "createFile"-Methode mit wb.write das File weggeschrieben.

Das Problem ist jetzt natürlich, dass es zum Zeitpunkt des write die ganzen Row- bzw. Cell-Objekte nicht mehr gibt, und die Exceldatei leer ist.

Eine Lösung wäre natürlich mir erstmal meine ganzen Werte in eine Arraylist oder so zu schreiben, und später dann mit der Arraylist die Zellen zu füllen. An dieser Lösung stört mich aber, dass die ganze Semantik flöten geht. Ich möchte später die Zellen abhängig von ihrem Wert formatieren, was ich aber mit der Arraylist-Lösung vergessen kann, weil ich dann nicht mehr weiss welche Zelle wo wie zu formatieren ist.

Irgendwie hab ich da grad nen Hänger, wie ich das Problem "richtig" lösen kann.
 
Zuletzt bearbeitet:

twagi

Mitglied
Hallo,

sind das Strings die Du einfügen willst?
Ansonsten hilft es vielleicht wenn Du den CellStyle und CellType angibst.

Also zum Beispiel:
Java:
HSSFCellStyle style = workbook.createCellStyle();
HSSFFont font = workbook.createFont()

font.setFontName("Verdana");
font.setFontHeightInPoints((short)10);
font.setColor(HSSFFont.COLOR_NORMAL);
font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);

style.setFont(theFont);

cell.setCellStyle(style);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setCellValue(new HSSFRichTextString("Hallo");

Gruß Twagi
 

seppo05

Grünschnabel
Danke twagi, für die Tipps zur Formatierung der Zellen.

Mein eigentliches Problem aber besteht immernoch. Zum Zeitpunkt wo ich mir das Workbook wegschreibe, sind die untergeordneten Cell- (und Row-)Objekte schon zerstört, und ich erhalte nur eine leere XLS-Datei. Wie löst man also sowas (elegant), alles nur in eine Methode kann auch auch nicht der Weisheit letzter Schluß sein.

Gruß