Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Effizienter Weg um Formulare/Berichte zu generieren
emuuu
myCSharp.de - Member

Avatar #avatar-4078.jpg


Dabei seit:
Beiträge: 287

Themenstarter:

Effizienter Weg um Formulare/Berichte zu generieren

beantworten | zitieren | melden

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)
private Nachricht | Beiträge des Benutzers
t0ms3n
myCSharp.de - Member



Dabei seit:
Beiträge: 319

beantworten | zitieren | melden

Du kannst ggf. Open XML nutzen. Ich habe zuletzt EPPlus genutzt und damit gute Erfahrungen gemacht.
private Nachricht | Beiträge des Benutzers
pinki
myCSharp.de - Member

Avatar #avatar-4072.jpg


Dabei seit:
Beiträge: 704
Herkunft: OWL

beantworten | zitieren | melden

Das Open XML SDK kann auch zum Arbeiten mit den Dateien verwendet werden.
private Nachricht | Beiträge des Benutzers
codesoldier
myCSharp.de - Member



Dabei seit:
Beiträge: 29

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
emuuu
myCSharp.de - Member

Avatar #avatar-4078.jpg


Dabei seit:
Beiträge: 287

Themenstarter:

beantworten | zitieren | melden

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)
private Nachricht | Beiträge des Benutzers
t0ms3n
myCSharp.de - Member



Dabei seit:
Beiträge: 319

beantworten | zitieren | melden

https://epplusexcel.codeplex.com/ mal geschaut? Ansonsten kannst Du natürlich zum Speichern weiterhin Interop nutzen, sollte insgesamt dennoch schneller sein.
private Nachricht | Beiträge des Benutzers
emuuu
myCSharp.de - Member

Avatar #avatar-4078.jpg


Dabei seit:
Beiträge: 287

Themenstarter:

beantworten | zitieren | melden

Zitat von t0ms3n
https://epplusexcel.codeplex.com/ 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).
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von emuuu am .
2+2=5 (für extrem große Werte von 2)
private Nachricht | Beiträge des Benutzers
t0ms3n
myCSharp.de - Member



Dabei seit:
Beiträge: 319

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
emuuu
myCSharp.de - Member

Avatar #avatar-4078.jpg


Dabei seit:
Beiträge: 287

Themenstarter:

beantworten | zitieren | melden

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)
private Nachricht | Beiträge des Benutzers