Verwendetes Datenbanksystem: Excel
Hallo,
ich möchte aus einer c# dll nach Excel Daten exportieren.
Sobald ein bestimmtes Ereignis auftritt soll eine neue Zeile entstehen und die verschiedenen spalten (insgesamt 30-40) enthalten jeweils unterschiedliche Daten zu diesem Ereignis.
Da die Daten zusammen mit dem Ereignis im Prinzip endlos in Echtzeit reinkommen, wäre schon mal die grundsätzliche Frage, ob man hier kontinuierlich in eine Datei schreiben sollte oder ob man die Daten zunächst im RAM zwischenspeichern und dann nach einetr Zeit X komplett in eine Datei speichern sollte. Dann wäre es hilfreich zu wissen, ob in den ganzen .Net Bibliotheken schon etwas existiert, was dieses Vorhaben unterstützt (also Excel Unterstützung).
Allgemein wäre noch die Frage offen, wie man sich am Besten über die gesamte Funktionalität der vorhandenen dlls/Bibliotheken einen Überblick verschaffen kann. Könnt Ihr da irgendweine Quelle oder ein Buche etc. empfehlen ?
Mach das mit CSV, das würde die mit Abstand performanteste Lösung sein.
Du musst für neue Daten nur das Ende der Datei suchen und die neue Zeile anhängen, wenn Du den FileStream offen lässt, müsste das die schnellste Lösung sein.
Ich weiß nicht, wie bestehende Frameworks mit Echtzeit-Schreiben umgehen, aber Du kannst es auch selber implementieren, CSV ist ja nicht sehr komplex.
Wenn Du ein Framework suchst, kann ich dir CsvHelper ans Herz legen, damit habe ich gute Erfahrungen gemacht.
Wenn Du unbedingft Excel brauchst, wird das schwieriger.
Es ist meines Wissens nach nicht möglich, Excel-Dateien kontinuierlich zu erweitern, ohne immer die ganze Datei zu lasen und zu speichern.
Ich würde daher die Daten im RAM halten und regelmäßig in einem eigenen Thread in eine Excel-Datei schreiben.
Wenn Du ein Framework suchst, kann ich dir ClosedXml ans Herz legen, das ist sehr intuitiv und einfach, kann aber immer nur eine Datei als Ganzes verarbeiten.
Alternativ kannst Du dir auch die offizielle DocumentFormat.OpenXml von Microsoft anschauen, allerdings ist das mMn. ziemlich unübersichtlich.
Oder vielleicht wäre es besser, auf eine Datenbank zurückzugreifen?