Laden...

Effizienter Weg um Formulare/Berichte zu generieren

Erstellt von emuuu vor 6 Jahren Letzter Beitrag vor 6 Jahren 2.860 Views
emuuu Themenstarter:in
286 Beiträge seit 2011
vor 6 Jahren
Effizienter Weg um Formulare/Berichte zu generieren

Guten Tag zusammen,

ich habe ein kleines Problem was sich vor allem auf die Performance meiner bestehenden Lösung bezieht.

Ich habe die Vorlage für einen (einseitigen) Bericht als .xlsx vorliegen. Diese möchte ich mit Daten füllen und dann als mehrseitiges PDF zur Verfügung stellen.

Bisher löse ich das folgendermaßen:
Ich hole mir die Daten von einem SQL-Server und öffne die Vorlage über die Interop-Schnittstelle.

In einer foreach-Schleife durchlaufe ich dann meinen Datensatz, fülle die relevanten Zellen mit Daten und exportiere die Excel-Datei dann via ExportAsFixedFormat ins PDF.

Diese Lösung ist soweit auch funktional, nur ist die Interop-Schnittstelle furchtbar langsam ist und der gesamte Vorgang dauert pro Seite ca 2 Sekunden. Zudem sind die PDFs mit ca 350kB viel zu groß für eine einseitige Datei die nur Text enthält (wenn ich Excel manuell öffne und "Exportieren als PDF" aufrufe sind die Ergebnisse nur 30kB groß).

Das ist alles soweit erträglich nur enthalten die Berichte meist 4000-9000 Seiten. D.h. der Generierungsvorgang dauert einen halben Arbeitstag und die Ziel-Datei ist knapp 3GB groß.

Habt ihr hier einen Ansatz für eine performantere Lösung?

Vielen Dank und beste Grüße
emuuu

2+2=5( (für extrem große Werte von 2)

T
314 Beiträge seit 2013
vor 6 Jahren

Du kannst ggf. Open XML nutzen. Ich habe zuletzt EPPlus genutzt und damit gute Erfahrungen gemacht.

709 Beiträge seit 2008
vor 6 Jahren

Das Open XML SDK kann auch zum Arbeiten mit den Dateien verwendet werden.

C
26 Beiträge seit 2016
vor 6 Jahren

Hi Emuuu,

da Du einen SQL-Server verwendest, würde ich Dir die SQL-Server Reporting Services empfehlen.
Du gestaltest die Reportdatei nach Deiner Excel-Vorlage und kannst, wenn der Prozess immer noch zu lange dauert, die Berichtsgenerierung schedulen z.B. immer nachts anstossen.

emuuu Themenstarter:in
286 Beiträge seit 2011
vor 6 Jahren

Also EPPlus funktioniert für die Generierung der Excel-Dateien ziemlich gut und auch fix.

Flaschenhals bleibt weiterhin die Generierung der PDF-Datei. Die unzählichen 3rd-party-Lösungen funktionieren entweder nicht oder sind horrendteuer.

Aktuell bleibt mir wieder nur der Weg über Interop -> Schnecke.

@codesoldier
Danke für den Tipp, das benutze ich auch in einigen Bereichen nur leider kommt ein Teil der Daten aus einer Access .mdb (ja der Horror, kann ich leider nicht ändern), d.h. der Ansatz funktioniert hier leider nicht.

2+2=5( (für extrem große Werte von 2)

T
314 Beiträge seit 2013
vor 6 Jahren

https://epplusexcel.codeplex.com/ mal geschaut? Ansonsten kannst Du natürlich zum Speichern weiterhin Interop nutzen, sollte insgesamt dennoch schneller sein.

emuuu Themenstarter:in
286 Beiträge seit 2011
vor 6 Jahren


>
mal geschaut? Ansonsten kannst Du natürlich zum Speichern weiterhin Interop nutzen, sollte insgesamt dennoch schneller sein.

Sagte doch das ich das jetzt verwende und die Erstellung der .xlsx funktionier nun sehr schnell. ^^ Aber ich brauche am Ende ja PDF-Dateien und soweit ich mir das durchgelesen habe unterstützt epplus keinen PDF-Export.

Edit:
Ich sollte vllt. noch erwähnen, dass ich Free Spire.XLS bereits getestet habe, dort tritt aber ein Bug auf der wohl mit eingebetteten Bildern zu tun hat und laut E-iceblue-Supportforum in der aktuellen Free-Version nicht behoben wird (und die Vollversion ist mir eeeetwas zu teuer).

2+2=5( (für extrem große Werte von 2)

T
314 Beiträge seit 2013
vor 6 Jahren

Das war ja auch ein Projekt, welches auf dem vorherigen aufsetzt. (kenne ich selber nicht)
Da dieses aber anscheinend die erwähnte Free Spire.XLS verwendet, hilft dir dies dann nicht, wenn dies dort fehlerhaft ist.

emuuu Themenstarter:in
286 Beiträge seit 2011
vor 6 Jahren

Update:

Habe es die Bearbeitung der Exceldateien nun mit EPPLus durchgeführt und die Konvertierung mittels Free Spire.XLS (nuget) durchgeführt, wobei ich das eingebettete Bild entfernt und durch Text ersetzt habe, also mit dem Bug lebe solange er besteht. Gemerged habe ich die Dateien via iTextSharp.

2+2=5( (für extrem große Werte von 2)