Ich bin dabei, einer ASP.NET-App (VB.NET-Codebehind) einen Abschnitt hinzuzufügen, der es einem Benutzer ermöglicht, Daten als Excel-Datei an ihn zurückzugeben, die ich basierend auf Datenbankdaten generieren werde. Es gibt verschiedene Möglichkeiten, dies zu tun, aber jede hat ihre eigenen Nachteile. Wie würden Sie die Daten zurückgeben? Ich suche etwas, das so sauber und unkompliziert wie möglich ist.
asp.net
vb.net
export-to-excel
Dan Coates
quelle
quelle
Antworten:
CSV
Vorteile:
Nachteile:
HTML
Vorteile:
Nachteile:
OpenXML (Office 2007 .XLSX)
Vorteile:
Nachteile:
SpreadSheetML (offenes Format XML)
Vorteile:
Nachteile:
XLS (generiert von einer Drittanbieter-Komponente)
Vorteile:
Nachteile:
COM Interop
Vorteile:
Nachteile:
quelle
Sie können die Daten als HTML-Tabellenzellen ausgeben, eine
.xls
oder eine.xlsx
Erweiterung darauf kleben , und Excel öffnet sie, als wäre es ein natives Dokument. Auf diese Weise können Sie sogar einige eingeschränkte Formatierungs- und Formelberechnungen durchführen, sodass es viel leistungsfähiger als CSV ist. Außerdem sollte die Ausgabe einer HTML-Tabelle von einer Webplattform wie ASP.Net aus ziemlich einfach sein;)Wenn Sie mehrere Arbeitsblätter oder benannte Arbeitsblätter in Ihrer Excel-Arbeitsmappe benötigen, können Sie etwas Ähnliches über ein XML-Schema namens ausführen
SpreadSheetML
. Dies ist nicht das neue Format, das mit Office 2007 ausgeliefert wurde, sondern etwas völlig anderes, das bereits in Excel 2000 funktioniert. Der einfachste Weg, die Funktionsweise zu erklären, ist ein Beispiel:quelle
Wenn Sie von einer Datentabelle kommen :
Aus einer Rasteransicht :
quelle
Dies ist ein kostenloser Wrapper für SpreadML - er funktioniert hervorragend.
http://www.carlosag.net/Tools/ExcelXmlWriter/
quelle
Basierend auf den gegebenen Antworten und der Konsultation mit Kollegen scheint es die beste Lösung zu sein, entweder eine XML-Datei oder HTML-Tabellen zu generieren und sie als Anhang nach unten zu verschieben. Die einzige von meinen Mitarbeitern empfohlene Änderung besteht darin, dass die Daten (dh die HTML-Tabellen) direkt in das Response-Objekt geschrieben werden können, sodass keine Datei mehr geschrieben werden muss, was aufgrund von Berechtigungsproblemen, E / A, problematisch sein kann Streit und Sicherstellen, dass eine geplante Bereinigung erfolgt.
Hier ist ein Ausschnitt des Codes ... Ich habe dies noch nicht überprüft und nicht den gesamten aufgerufenen Code angegeben, aber ich denke, er repräsentiert die Idee gut.
quelle
Da Excel HTML versteht, können Sie die Daten einfach als HTML-Tabelle in eine temporäre Datei mit der Erweiterung .xls schreiben, die FileInfo für die Datei abrufen und sie mit zurückblasen
Wenn Sie die temporäre Datei vermeiden möchten, können Sie in einen speicherinternen Stream schreiben und die Bytes zurückschreiben, anstatt WriteFile zu verwenden
Wenn der Header für die Inhaltslänge weggelassen wird, können Sie den HTML-Code einfach direkt zurückschreiben. Dies funktioniert jedoch möglicherweise nicht immer in allen Browsern
quelle
Ich persönlich bevorzuge die XML-Methode. Ich werde die Daten aus der Datenbank in einem Dataset zurückgeben, sie in XMl speichern, dann eine xslt-Datei erstellen, die eine Transformationsregel enthält, die ein ordnungsgemäßes Dokument formatiert, und eine einfache XML-Transformation beendet den Job. Das Beste daran ist, dass Sie Zellen formatieren, bedingte Formatierungen vornehmen, Kopf- und Fußzeilen einrichten und sogar Druckbereiche festlegen können.
quelle
Ich habe dies einige Male getan und jedes Mal war es am einfachsten, einfach eine CSV-Datei (Comma Separated Value) zurückzugeben. Excel importiert es perfekt und es ist relativ schnell zu tun.
quelle
Wir exportieren Daten aus einem Datagrid, um sie jederzeit zu übertreffen. Konvertieren Sie es in HTML und schreiben Sie es in eine Excel-Datei
Das einzige Problem bei dieser Methode war, dass viele unserer Gitter Schaltflächen oder Links enthielten, sodass Sie dies auch benötigen:
Ich habe festgestellt, dass es irgendwo gut funktioniert.
quelle
Ich empfehle die kostenlose Open Source Excel Generation Libruary, die auf OpenXML basiert
Es hat mir vor einigen Monaten geholfen.
quelle
Hier ist ein Bericht, der aus einer gespeicherten Prozedur abgerufen wird. Die Ergebnisse werden nach Excel exportiert. Es verwendet ADO anstelle von ADO.NET und der Grund dafür ist diese Zeile
Es erledigt den größten Teil der Arbeit und ist in ado.net nicht verfügbar.
quelle
Wenn Sie eine GridView mit Daten füllen, können Sie diese Funktion verwenden, um die HTML-formatierten Daten abzurufen. Der Browser zeigt jedoch an, dass es sich um eine Excel-Datei handelt.
quelle
Vermeiden Sie einfach COM Interop über den Microsoft.Office.Interop-Namespace. Es ist so verdammt langsam und unzuverlässig und nicht skalierbar. Gilt nicht für Masochisten.
quelle
Mit dieser Bibliothek können Sie ganz einfach gut formatierte Excel-Dateien erstellen: http://officehelper.codeplex.com/documentation .
Microsoft Office muss nicht auf dem Webserver installiert sein!
quelle
CSV ist der einfachste Weg. Meistens ist es mit Excel verknüpft. Andernfalls müssen Sie die Automatisierungs-APIs oder das XML-Format verwenden. Die APIs und XML sind nicht so schwer zu bedienen.
Informationen zum Generieren von XML für Excel
quelle
Ich gehe entweder die CSV-Route (wie oben beschrieben) oder verwende heutzutage häufiger Infragistics NetAdvantage, um die Datei zu generieren. (In den meisten Fällen, in denen Infragistics im Spiel ist, exportieren wir nur ein vorhandenes UltraWebGrid, bei dem es sich im Wesentlichen um eine Ein-LOC-Lösung handelt, sofern keine zusätzlichen Formatierungsänderungen erforderlich sind. Wir könnten auch manuell eine Excel / BIFF-Datei generieren. aber es gibt selten eine Notwendigkeit.)
quelle
Mann, in .net könnte man eine Komponente haben, die das kann, aber in klassischem asp habe ich es bereits getan, eine HTML-Tabelle zu erstellen und die MIME-Tabelle der Seite in vnd / msexcel zu ändern. Ich denke, wenn Sie eine Rasteransicht verwenden und den MIME-Typ ändern, sollte dies möglicherweise funktionieren, da die Rasteransicht eine HTML-Tabelle ist.
quelle
Die einzige kugelsichere Möglichkeit, die grünen Dreiecke "Es sieht so aus, als würden diese Zahlen als Text gespeichert" zu vermeiden, ist die Verwendung des Open XML-Formats. Es lohnt sich, es zu verwenden, nur um die unvermeidlichen grünen Dreiecke zu vermeiden.
quelle
Die beste Methode, die ich für Excel-Berichte gesehen habe, besteht darin, die Daten in XML mit einer XML-Erweiterung zu schreiben und sie an Clients mit dem richtigen Inhaltstyp zu streamen. (application / xls)
Dies funktioniert für alle Berichte, für die eine grundlegende Formatierung erforderlich ist, und ermöglicht den Vergleich mit vorhandenen Tabellen mithilfe von Textvergleichstools.
quelle
Angenommen, dies gilt für ein Intranet, in dem Sie Berechtigungen festlegen und den IE beauftragen können, können Sie die Arbeitsmappe clientseitig mit JScript / VBScript generieren, das Excel steuert . Auf diese Weise erhalten Sie eine native Excel-Formatierung, ohne mühsam versuchen zu müssen, Excel auf dem Server zu automatisieren.
Ich bin mir nicht sicher, ob ich diesen Ansatz wirklich empfehlen würde, außer in ziemlich Nischenszenarien, aber er war während der klassischen ASP-Blütezeit ziemlich häufig.
quelle
Sie können sich natürlich jederzeit für Komponenten von Drittanbietern entscheiden. Persönlich habe ich gute Erfahrungen mit Spire.XLS http://www.e-iceblue.com/xls/xlsintro.htm gemacht
Die Komponente ist in Ihrer Anwendung recht einfach zu verwenden:
quelle
Eines der Probleme, auf das ich mit einer der oben vorgeschlagenen Lösungen gestoßen bin, die dieser Antwort ähnlich sind besteht darin, dass Sie den Inhalt als Anhang herausschieben (was ich als die sauberste Lösung für Nicht-MS-Browser empfunden habe). Öffnen Sie es dann in Excel 2000-2003. Der Typ ist eine "Excel-Webseite" und kein natives Excel-Dokument.
Anschließend müssen Sie den Benutzern erklären, wie Sie "In Dateityp speichern" in Excel verwenden, um es in ein Excel-Dokument zu konvertieren. Dies ist ein Problem, wenn Benutzer dieses Dokument bearbeiten und dann erneut auf Ihre Website hochladen müssen.
Meine Empfehlung ist die Verwendung von CSV. Es ist einfach und wenn Benutzer es in Excel öffnen, fordert Excel sie zumindest auf, es in seinem nativen Format zu speichern.
quelle
Ich würde nur eine CSV-Datei basierend auf den Daten erstellen, da ich dies als die sauberste betrachte und Excel eine gute Unterstützung dafür hat. Wenn Sie jedoch ein flexibleres Format benötigen, gibt es sicher einige Tools von Drittanbietern zum Generieren von echten Excel-Dateien.
quelle
Hier ist eine Lösung, die die Daten als CSV überträgt. Schnell, sauber und einfach und verarbeitet Kommas in der Eingabe.
quelle
Ich habe gerade eine Funktion zum Exportieren aus einem Webformular C # erstellt, um zu hoffen, dass sie anderen hilft
quelle
Wenn Sie Excel anstelle einer CSV-Datei verwenden müssen, müssen Sie die OLE-Automatisierung auf einer Excel-Instanz auf dem Server verwenden. Der einfachste Weg, dies zu tun, besteht darin, eine Vorlagendatei zu haben und diese programmgesteuert mit den Daten zu füllen. Sie speichern es in einer anderen Datei.
Tipps:
Einige der Ansätze zum Verwenden von MIME-Typen, um Excel zum Öffnen von HTML-Tabellen zu verleiten, funktionieren, wenn Sie nichts dagegen haben, dass das Format der Datei etwas grundlegend ist. Diese Ansätze befördern auch die CPU-Arbeit auf den Client. Wenn Sie das Format der Tabelle genau steuern möchten, müssen Sie wahrscheinlich Excel selbst verwenden, um die Datei wie oben beschrieben zu generieren.
quelle