# Performantes Erstellen von Excel-Dateien



## stg (27. Jun 2016)

Hallo zusammen,

ich stolpere gerade über einen Excel-Export, den ich für meinen Kunden erstellen soll.

Bisher habe ich so etwas mit Apache POI realisiert und bin ich recht gut damit gefahren. Dieser eine ist jedoch in sofern "anders", da er recht umfangreich ist und es sehr genau Vorgaben hinsichtlich Styling usw gibt. Der Report umfasst mehrere Worksheets, mehrere Tabellen, die je nach Content unterschiedlich dimensioniert und formatiert sind usw..

Das Erstellen des Reports funktioniert prinzipiell und ist auch im mittleren dreistelligen Millisekunden-Bereich erledigt, was hinreichend ist. Das abschließende Schreiben (`workbook.write()`) in den OutputStream dauert jedoch recht lange (30-40 Sekunden), was für den Kunden nicht hinnehmbar ist. Angestrebt wird eine Antwortzeit von <5 Sekunden.

Hat jemand Erfahrung im Erstellen von komplexeren Reports mit Apache POI und weiß, wo möglicherweise Optimierungspotential besteht?
Kennt jemand andere APIs, die möglicherweise deutlich besser performen? Hinsichtlich Programmiersprache bin ich relativ frei, auch wenn das ganze letzten Endes in eine bestehende Java EE WebAnwendung integriert werden muss, aber da finden sich schon Mittel und Wege.

Aufgrund der Vielzahl an Möglichkeiten wollte ich einfach mal euch fragen, was eure Erfahrungen sind. Was könnt ihr empfehlen?


----------



## max40 (27. Jun 2016)

auf der Seite https://poi.apache.org/spreadsheet/index.html ist unten eine Tabelle. 
Vielleicht ist ja SXSSF (Streaming Usermodel API) noch eine alternative?


----------



## Thallius (27. Jun 2016)

Wäre wichtig zu wissen was die API alles können muss. Brauchst du auch Verlinkungen, Formeln, Filter etc oder wirklich einfach nur Daten in das Sheet?

Gruß

Claus


----------



## stg (27. Jun 2016)

max40 hat gesagt.:


> auf der Seite https://poi.apache.org/spreadsheet/index.html ist unten eine Tabelle.
> Vielleicht ist ja SXSSF (Streaming Usermodel API) noch eine alternative?



Das scheint beim Aufruf von `#Workbook.write()` selbst keinen (oder kaum einen) Unterschied zu machen. Das Arbeiten auf dem Workbook Objekt ist ja auch schnell genug, nur das abschließende Schreiben ist sehr langsam.



Thallius hat gesagt.:


> Wäre wichtig zu wissen was die API alles können muss. Brauchst du auch Verlinkungen, Formeln, Filter etc oder wirklich einfach nur Daten in das Sheet?



Ich brauche im konkretren Fall zwingend:
- Formatierungen (Farben, Schriftgröße, Borders, Merging von Zellen, Text-Wrapping, ...) 
- Filter
(Worksheet-übergreifende) Formeln wären schön, sind aber kein Muss. Gleiches gilt für bedingte Formatierungen.


----------



## Thallius (27. Jun 2016)

Ich hatte auch schon öfter meinen K(r)ampf mit Excel. Unter PHP war bisher Spout https://github.com/box/spout das kleinste Übel. Ob es für Deine Ansprüche genügt müßtest du mal selber schaun.

Gruß

Claus


----------



## stg (27. Jun 2016)

Thallius hat gesagt.:


> Ich hatte auch schon öfter meinen K(r)ampf mit Excel. Unter PHP war bisher Spout https://github.com/box/spout das kleinste Übel. Ob es für Deine Ansprüche genügt müßtest du mal selber schaun.



Ich schau's mir mal an, Danke vorab schon einmal für den Tipp.


----------

