Hallo Leute,
ich erzeuge über ein kleines Programm eine Excel-Datei mit Daten die ich aus einer DB heraushole und anschließend in die Excel-Datei schreibe. Das funktioniert auch einwandfrei. Nur erhöhe ich die Anzahl auf mehr als 20000 Datensätze (Oder 5MB xls Datei) bekomme ich eine Heap Space fehlermeldung, zwar beseitigt das zuweisen von mehr Speicher an der VM das Problem - so dass ich 100000 Datensätze reinhauen kann, was ich auch brauche - nur ist das für mich keine angebrachte Lösung (nicht jeder Rechner hat 1gb Ram frei)...
Aus dem Grund bin ich auf der Suche nach einer Alternative
Hier der Code ich benutze die API jexcelapi_2_6_8 zum schreiben von xls Dateien:
P.s: Bin gerade dabei Testweise 100000 Datensätze in die DB zu schreiben, vermutlich gibt es da auch Probleme.
ich erzeuge über ein kleines Programm eine Excel-Datei mit Daten die ich aus einer DB heraushole und anschließend in die Excel-Datei schreibe. Das funktioniert auch einwandfrei. Nur erhöhe ich die Anzahl auf mehr als 20000 Datensätze (Oder 5MB xls Datei) bekomme ich eine Heap Space fehlermeldung, zwar beseitigt das zuweisen von mehr Speicher an der VM das Problem - so dass ich 100000 Datensätze reinhauen kann, was ich auch brauche - nur ist das für mich keine angebrachte Lösung (nicht jeder Rechner hat 1gb Ram frei)...
Aus dem Grund bin ich auf der Suche nach einer Alternative
Hier der Code ich benutze die API jexcelapi_2_6_8 zum schreiben von xls Dateien:
Code:
private static void createBewegungsdatenExcelFile(String file, boolean all) throws IOException, BiffException, WriteException {
WritableWorkbook workbook = Workbook.createWorkbook(new File(file));
// Die Starttabelle erstellen
WritableSheet sheet = workbook.createSheet("Bewegungsdaten1", 0);;
// Content hinzufügen
addContent(sheet, workbook,file);
workbook.write();
workbook.close();
}
private static void addContent(WritableSheet sheet, WritableWorkbook workbook, String file) throws WriteException, IOException, BiffException {
// Formate festlegen
WritableCellFormat integerFormat = new WritableCellFormat(NumberFormats.INTEGER);
DateFormat customDateFormat = new DateFormat("dd.MMM.yyyy hh:mm:ss");
WritableCellFormat dateFormat = new WritableCellFormat(customDateFormat);
ArrayList<Bewegungsdata> bewegungsdaten =
new Bewegungsdata().getAllSQLData();
int reserve = 0;
for (int i = 0; i < 100000; i++) {
Bewegungsdata bdSatz = bewegungsdaten.get(1);
//Datensätze hinzufügen
sheet.addCell(convertStringInNumber(0,i+1 - reserve,bdSatz.getGeraetenr(),integerFormat));
sheet.addCell(new Label(1,i+1 - reserve,bdSatz.getKhnr()));
sheet.addCell(convertStringInNumber(2,i+1 - reserve,bdSatz.getStnr(),integerFormat));
sheet.addCell(convertStringInDate(3,i+1 - reserve,bdSatz.getMaanmeldezeit(),dateFormat));
sheet.addCell(convertStringInNumber(4,i+1 - reserve,bdSatz.getManr(),integerFormat));
sheet.addCell(new Label(5,i+1 - reserve,bdSatz.getBerufsgruppennr()));
sheet.addCell(convertStringInDate(6,i+1 - reserve,bdSatz.getBeginn(),dateFormat));
sheet.addCell(convertStringInDate(7,i+1 - reserve,bdSatz.getVorPat(),dateFormat));
sheet.addCell(new Label(8,i+1 - reserve,bdSatz.getPatNr()));
sheet.addCell(convertStringInDate(9,i+1 - reserve,bdSatz.getNachpat(),dateFormat));
sheet.addCell(convertStringInDate(10,i+1 - reserve,bdSatz.getVoreingruppierung(),dateFormat));
sheet.addCell(convertStringInNumber(11,i+1 - reserve,bdSatz.getTgruppenr(),integerFormat));
sheet.addCell(convertStringInNumber(12,i+1 - reserve,bdSatz.getTaetigkeitnr(),integerFormat));
sheet.addCell(convertStringInDate(13,i+1 - reserve,bdSatz.getNacheingruppier(),dateFormat));
sheet.addCell(convertStringInDate(14,i+1 - reserve,bdSatz.getVordauer(),dateFormat));
sheet.addCell(new Label(15,i+1 - reserve,bdSatz.getDummy()));
sheet.addCell(convertStringInNumber(16,i+1 - reserve,bdSatz.getKette(),integerFormat));
sheet.addCell(convertStringInDate(17,i+1 - reserve,bdSatz.getNachtaetigkeit(),dateFormat));
sheet.addCell(convertStringInDate(18,i+1 - reserve,bdSatz.getEnde(),dateFormat));
sheet.addCell(convertStringInDate(19,i+1 - reserve,bdSatz.getNaechsterbeginn(),dateFormat));
// Eine Tabelle kann nur max. 65500 Datensätze beinhalten
if(i % 65530 == 0 && i != 0) {
sheet = workbook.createSheet("Bewegungsdaten" + ((int) (i/65530)+1), (int) i/65530+1);
addHeader(sheet);
reserve = i + 1;
}
}
}
P.s: Bin gerade dabei Testweise 100000 Datensätze in die DB zu schreiben, vermutlich gibt es da auch Probleme.