Excel importieren und exportieren - Was ist die beste Bibliothek? [geschlossen]

180

In einer unserer ASP.NET-Anwendungen in C # nehmen wir eine bestimmte Datenerfassung (SubSonic-Sammlung) und exportieren sie nach Excel. Wir möchten auch Excel-Dateien in einem bestimmten Format importieren. Ich suche eine Bibliothek, die ich für diesen Zweck nutzen kann.

Bedarf:

  • Excel 2007-Dateien (Unterstützt Excel 2003 mehr als 64.000 Zeilen? Ich benötige mehr.)
  • Benötigt kein Excel auf dem Server
  • Nimmt eine typisierte Sammlung und versucht, wenn möglich, numerische Felder in Excel als numerisch zu setzen.
  • Funktioniert gut mit großen Dateien (100k bis 10M) - schnell genug.
  • Stürzt beim Exportieren von GUIDs nicht ab!
  • Kostet nicht viel Geld (keine Unternehmensbibliothek wie aspose). Kostenlos ist immer toll, kann aber eine kommerzielle Bibliothek sein.

Welche Bibliothek empfehlen Sie? Haben Sie es für große Datenmengen verwendet? Gibt es andere Lösungen?

Im Moment verwende ich ein einfaches Tool, das HTML generiert, das später von Excel geladen wird, aber ich verliere einige Funktionen, und Excel beschwert sich, wenn wir es laden. Ich muss keine Diagramme oder ähnliches generieren, sondern nur Rohdaten exportieren.

Ich denke an flache CSV-Dateien, aber Excel ist eine Kundenanforderung. Ich kann direkt mit CSV arbeiten, wenn ich ein Tool zum Konvertieren in und aus Excel hätte. Angesichts der Tatsache, dass Excel 2007 ein XML-basiertes (und komprimiertes) Dateiformat ist, sollte diese Art von Bibliothek leicht zu finden sein. Am wichtigsten für mich sind jedoch Ihre Kommentare und Meinungen.


EDIT: Ironischerweise ist meiner Meinung nach und nach der Antwort mit den meisten Stimmen die beste Excel-Import- und Exportbibliothek überhaupt kein Export. Dies ist nicht für alle Szenarien der Fall, aber für meine. XLS-Dateien unterstützen nur 64.000 Zeilen. XLSX unterstützt bis zu 1M. Die kostenlosen Bibliotheken, die ich ausprobiert habe, weisen eine schlechte Leistung auf (eine Sekunde zum Laden einer Zeile, wenn Sie 200.000 Zeilen haben). Ich habe die bezahlten nicht ausprobiert, da ich der Meinung bin, dass sie für den Wert, den sie liefern, überteuert sind, wenn Sie nur eine schnelle XLSX <-> CSV-Konvertierungsroutine benötigen.

Jason Kealey
quelle
18
"Angesichts der Tatsache, dass Excel 2007 ein XML-basiertes (und komprimiertes) Dateiformat ist, denke ich, dass diese Art von Bibliothek leicht zu finden sein sollte" - hah! Das ist so, als würde man sagen "Excel 97 ist bytebasiert, daher sollte diese Art von Bibliothek leicht zu finden sein". XML bedeutet keine Einfachheit, und OOXML ist das Aushängeschild dafür, wie XML unterbestimmt und nicht entzifferbar komplex gemacht werden kann. :-)
Ken
Eigentlich haben Sie diese Annahme nicht ganz richtig getroffen. Es stehen Tools zur Verfügung, mit denen das Erstellen eines wohlgeformten OOXML-Dokuments zumindest für XLSX sehr einfach mit C # .NET durchgeführt werden kann.
Anonymer Typ
3
Ich habe einen Site-Vorschlag erstellt, um Fragen wie dieser ein offizielles Zuhause außerhalb von Stack Overflow zu geben. Es heißt Code-Empfehlungen. Helfen Sie dabei, dies zu verwirklichen, indem Sie sich jetzt anmelden und Fragen stellen!
Daviewales
Was ist mit Spire.xls? Für die Pro Edition sind es nur 800 US-Dollar. Sie erhalten alle Ihre Conversions sowie Ihren Excel-Import oder Exporteur. e-iceblue.com/Introduce/…
DotNet Programmer
GemBox.Spreadsheet ist eine weitere Lösung, die es wert ist, überprüft zu werden. Sie ist superschnell und bietet sowohl kostenlose als auch Pro-Versionen. Außerdem ist die Pro-Version ziemlich billig und hat keine versteckten beschissenen Kosten für die Bereitstellung, wie die meisten von ihnen.
NixonUposseen

Antworten:

41

Ich werde meine Hand für flache CSV-Dateien werfen, schon allein, weil Sie die größte Kontrolle über den Code haben. Stellen Sie einfach sicher, dass Sie die Zeilen einlesen und einzeln verarbeiten (wenn Sie das Dokument bis zum Ende lesen und aufteilen, wird Ihr gesamtes Gedächtnis aufgebraucht - genau wie beim Schreiben, streamen Sie es aus).

Ja, der Benutzer muss als Excel in Excel speichern, bevor Sie es verarbeiten können. Vielleicht kann diese Einschränkung jedoch durch Schulung und Bereitstellung klarer Anweisungen auf der Seite überwunden werden.

Wenn Sie beim Exportieren an den Kunden den MIME-Typ auf Text / CSV setzen, wird Excel normalerweise diesem Typ zugeordnet, sodass es dem Benutzer als "Excel-Datei" erscheint.

Tsimon
quelle
4
Ich habe auch den CSV-Ansatz ausprobiert, aber es gibt mehrere Probleme damit. Was ist zum Beispiel, wenn Sie einen mehrzeiligen Text in einer Zelle haben möchten? Ich konnte Excel nicht dazu bringen, eine solche CSV zu importieren.
Igor Brejc
23
CSV hat seinen Platz, aber das Poster fragte nach Excel. Ich gehe davon aus, dass er Excel wollen muss, nicht CSV.
John Scipione
7
CSV fällt beim Exportieren von Spalten wie 0345 ab. Excel schneidet dies automatisch auf 345 ab. Dies ist überhaupt nicht hilfreich, wenn diese führende Ziffer wichtig ist.
NotMe
2
HTML - Tabelle mit einer Erweiterung Excel - Datei scheint ganz gut zu funktionieren ... es wird einige CSS in eigentümlicher Weise für Dinge zu analysieren , wie die Formatierung mehrerer Linien, Farben und so weiter - ohne tatsächlich eine native Excel - Datei zu erstellen,
Oskar Duveborn
3
"Speichern als"? Nein. Wenn der Kunde Excel verwendet, warum sollte er dann eine zweite, viel eingeschränktere Datei speichern, um mit Ihrem Produkt zu interagieren?
mlibby
41

Ich habe das Open XML SDK seit meiner ursprünglichen Antwort entdeckt. Es bietet unter anderem stark typisierte Klassen für Tabellenkalkulationsobjekte und scheint recht einfach zu bearbeiten zu sein. Ich werde es für Berichte in einem meiner Projekte verwenden. Leider soll Version 2.0 erst Ende 2009 oder 2010 veröffentlicht werden.

cdonner
quelle
Sehr interessant! Haben Sie es mit großen Datenmengen getestet?
Jason Kealey
Ich habe keinen Leistungstest durchgeführt. Ich werde hauptsächlich Diagramme und einseitige Berichte erstellen, daher ist der Durchsatz für mich kein Problem. Es scheint jedoch so schnell zu sein, wie verwalteter Code sein kann.
cdonner
1
@ Jason Kealey: Dies ist wirklich die beste Antwort auf diesen Beitrag - Export wird mit SpreadsheetML irrelevant. Auf die Daten kann innerhalb der Datei zugegriffen werden. Wenn Sie die Daten in einem anderen Format benötigen, stellen Sie eine Transformation über ein XSLT oder über Linq bereit.
Todd Main
1
Dies funktioniert jedoch überhaupt nicht für ".xls" -Dateien.
Federbrecher
github.com/OfficeDev/Open-XML-SDK ist jetzt Open Source und wird von Github gehostet (ich mag, wohin MS in letzter Zeit geht)
Alex
34

Die neue Version von ExcelPackage finden Sie hier http://EPPlus.codeplex.com

Ich kämpfe immer noch mit der Funktion "In Excel exportieren", da meine Anwendung einige Daten in die Excel-Vorlage 2007 exportieren sollte

Dieses Projekt scheint mir in Ordnung zu sein, und der Entwickler reagiert sehr schnell auf Fehler und Probleme.

Mohannad Otaibi
quelle
3
Funktioniert gut, ist aber unter der GPL lizenziert - z. B. muss jede Software, die es verwendet, auch im einfachen Quellcode verfügbar sein ... nicht immer eine gute Wahl ...
marc_s
Exportieren Sie in einem für Sie geeigneten nativen Format einen Prog. das EPPlus verwendet, um in Excel zu konvertieren, machen Sie das kostenlos. Lassen Sie Ihr Hauptprogramm dies standardmäßig verwenden, aber lassen Sie andere "Plugins" zu, damit Ihr echter Code frei von der GPL ist.
5
Es scheint, dass dies jetzt unter der LGPL lizenziert ist, sodass Sie es ohne die Copyleft-Einschränkungen als verknüpfte Bibliothek verwenden können.
Brad R
Beachten Sie, dass diese Bibliothek dazu neigt, zufällig "unlesbare Inhalte" in Excel zu erzeugen, wenn Sie eine Excel-Datei mit großen Zeichenfolgen erstellen müssen.
Kevin Laity
1
Beachten Sie, dass EPPlus Speicher verliert und nicht für große Datenmengen geeignet ist.
user3285954
18

Ich habe ClosedXML verwendet und es funktioniert großartig!

ClosedXML erleichtert Entwicklern das Erstellen von Excel 2007/2010-Dateien. Es bietet eine schöne objektorientierte Möglichkeit, die Dateien (ähnlich wie VBA) zu bearbeiten, ohne sich mit den Problemen von XML-Dokumenten befassen zu müssen. Es kann von jeder .NET-Sprache wie C # und Visual Basic (VB) verwendet werden.

Druide
quelle
8
Ich liebe die Ironie im Namen ...
Jagd
Benutzte es auch und die gleiche Erfahrung. Funktioniert gut und ist sehr flexibel.
AnthonyVO
14

SpreadsheetGear für .NET liest und schreibt CSV / XLS / XLSX und bietet mehr.

Sie können Live - ASP.NET Proben mit C # und VB - Quellcode sehen hier und eine kostenlose Testversion herunterladen hier .

Natürlich denke ich, dass SpreadsheetGear die beste Bibliothek zum Importieren / Exportieren von Excel-Arbeitsmappen in ASP.NET ist - aber ich bin voreingenommen. Sie können sehen, was einige unserer Kunden auf der rechten Seite dieser Seite sagen .

Haftungsausschluss: Ich besitze SpreadsheetGear LLC

Joe Erickson
quelle
@ Joe Erickson: Können Sie sagen, wie man eine CSV liest und dann eine XML aus der CSV erstellt, die nur mit Spreadsheet Gear gelesen wird, und mit diesem XLS eine resultierende XML-Datei erstellt, die diese Struktur enthält? Oder können wir Spreadsheetgear verwenden, um ein XML direkt aus einer CSV zu erstellen?
AnkitSablok
5

Ich habe Flexcel in der Vergangenheit verwendet und es war großartig. Dies diente jedoch eher der programmgesteuerten Erstellung und Aktualisierung von Excel-Arbeitsblättern.

Duncan
quelle
Ich kann nicht sehen, dass dies Excel 2007 (xlsx) unterstützt. Da xls nur 64k Zeilen unterstützt, ist dies für mich eine Einschränkung.
Jason Kealey
@ Jason Kealey - Flexcel unterstützt jetzt Excel 2007 und 2010.
Pauk
5

Der CSV-Export ist einfach, leicht zu implementieren und schnell. Es gibt jedoch ein potenzielles Problem, das es zu beachten gilt. Excel (bis 2007) behält keine führenden Nullen in CSV-Dateien bei. Dadurch werden Postleitzahlen, Produkt-IDs und andere Textdaten mit numerischen Werten beschädigt. Es gibt einen Trick, mit dem Excel die Werte korrekt importiert (unter Verwendung von Trennzeichen und Präfixwerten mit dem Zeichen =, wenn ich mich richtig erinnere, z. B. = "02052", ...). Wenn Sie Benutzer haben, die Nachbearbeitungsaufgaben mit der CSV ausführen, müssen sie sich bewusst sein, dass sie das Format in XLS ändern und die Datei nicht wieder in CSV speichern müssen. Wenn dies der Fall ist, gehen führende Nullen endgültig verloren.

cdonner
quelle
1
Für alles, was als Text erhalten bleiben soll, setzen Sie einfach ein '(Apostroph) am Anfang
phuclv
Eine weitere lustige Tatsache: Ich kann eine durch Kommas getrennte Datei an vielen Orten nicht öffnen, z. B. in Deutsch. Das macht CSV zu einem schlechten Format, um Daten mit internationalen Kontakten zu teilen
Christian Sauer
4

Seit Jahren verwende ich JExcel für dieses hervorragende Open-Source-Java-Projekt. Es war auch .NET-fähig, indem J # zum Kompilieren verwendet wurde, und ich hatte auch großen Erfolg damit in dieser Inkarnation. Vor kurzem musste ich den Code jedoch auf natives .NET migrieren, um eine 64-Bit-IIS-Anwendung zu unterstützen, in der ich eine Excel-Ausgabe erstelle. Die 32-Bit-J # -Version würde nicht geladen.

Der Code für CSharpJExcel ist LGPL und verfügbar ist derzeit auf diesem Seite Wir bereiten die Bereitstellung auf der JExcel SourceForge-Site vor. Es wird mit VS2005 oder VS2008 kompiliert. Die Beispiele in der ursprünglichen JExcel-Dokumentation werden ziemlich gut intakt auf die .NET-Version übertragen.

Hoffe, es ist hilfreich für jemanden hier draußen.

Chris Laforet
quelle
Beide Links funktionieren nicht mehr ... aber ich habe einige Ausschnitte davon gefunden und es sieht so aus, als wäre es Java-freundlicher, nicht so sehr für .NET-Entwickler. Ich habe jedoch eine andere Bibliothek gefunden, die sich gegenüber befindet. Es handelt sich um eine native .NET-Bibliothek ( GemBox.Spreadsheet ), die ebenfalls nach Java portiert wurde ( GemBox.Spreadsheet für Java ).
Hazel Patton
3

Ich habe lange mit Excel Jetcell gearbeitet und kann es wirklich empfehlen. http://www.devtriogroup.com/exceljetcell

  • Kommerzielles Produkt
  • Excel-Dateien XLS & XLSX
  • Basierend auf eigenem Motor im reinen Netz.
Robert Tyson
quelle
3

Die folgende Site zeigt, wie Sie eine DataTable, ein DataSet oder eine List <> in eine "richtige" Excel 2007-XLSX-Datei exportieren (anstatt eine CSV-Datei zu exportieren und Excel zum Öffnen zu bewegen).

Es nutzt die OpenXML - Bibliotheken, so dass Sie nicht tun Excel auf dem Server installiert haben müssen.

Mikes Knowledge Base - ExportToExcel

Der gesamte Quellcode sowie eine Demo-Anwendung werden kostenlos zur Verfügung gestellt.

Es ist sehr einfach, Ihre eigenen Anwendungen zu erweitern. Sie müssen nur eine Funktion aufrufen, einen Excel-Dateinamen und Ihre Datenquelle übergeben:

DataSet ds = CreateSampleData();
string excelFilename = "C:\\Sample.xlsx";
CreateExcelFile.CreateExcelDocument(ds, excelFilename);

Hoffe das hilft.

Mike Gledhill
quelle
2

Überprüfen Sie das ExcelPackage- Projekt. Es verwendet das Office Open XML-Dateiformat von Excel 2007, ist leicht und Open Source ...

CMS
quelle
1
Sah gut aus, aber ein Kommentar sagt, dass es mit großen Dateien schlecht ist (mein Szenario)
Jason Kealey
1
Interessant - es ist als GPL lizenziert, nicht als LGPL. Daher muss es in GPL-Anwendungen verwendet werden. (Auch bedauerlich, dass die Entwicklung gestoppt zu haben scheint.)
Jason Kealey
1
Ich habe ExcelPackage ausprobiert, musste es jedoch abbrechen. Es schlägt fehl, wenn Sie versuchen, einfache Anführungszeichen (') in eine Zelle einzufügen.
Igor Brejc
2

Ich habe CSharpJExcel ausprobiert und würde es nicht empfehlen, zumindest nicht, bis eine Dokumentation verfügbar ist. Im Gegensatz zu den Kommentaren der Entwickler handelt es sich nicht um einen reinen nativen Port.

user483711
quelle
2

Ich weiß, dass dies ziemlich spät ist, aber ich fühle mich gezwungen, xPorter (Schreiben) und xlReader (Lesen) von xPortTools.Net zu beantworten . Wir haben einige Bibliotheken getestet und nichts hat die Leistung beeinträchtigt (ich spreche hier davon, Millionen von Zeilen in Sekunden zu schreiben). Ich kann nicht genug gute Dinge über diese Produkte sagen!

DanP
quelle
2

Sie können verwenden Microsoft.Jet.OLEDB.4.0

RG.
quelle
1
Eine meiner Anforderungen ist, dass Excel nicht auf dem Server ausgeführt wird.
Jason Kealey
2
Ich glaube nicht, dass es läuft !!
Soner Gönül
2
MS Office ist für "Microsoft.Jet.OLEDB.4.0" (für XLS) "Microsoft.ACE.OLEDB.12.0 für XLSX" nicht erforderlich. Sie müssen nur Treiber verwenden, also keine Chance, Excel auf dem Server @Jason Kealey
Sanjay Goswami
1
Ich habe dies für XLS verwendet (nicht die ursprüngliche Anforderung) und der Vollständigkeit halber ... Es gibt einige wichtige Probleme: (1) Es ist nur 32-Bit, daher müssen Sie IIS einstellen, um dies zuzulassen. (2) Der Export ist furchtbar langsam. (3) Die Zeilen- und Spaltengrenzen sind schlecht dokumentiert. (4) Es besteht darauf, importierte Spalten zu "typisieren", es sei denn, Sie haben Registrierungszugriff, und es wird im Allgemeinen falsch verstanden.
Philw
1

Wir haben gerade einen ähnlichen Bedarf festgestellt. Und ich denke, es ist wichtig, die Benutzererfahrung zu berücksichtigen.

Wir wurden fast abgelenkt:

  1. Vorbereiten / Arbeiten in einer Tabellenkalkulationsdatei
  2. Datei speichern
  3. Datei importieren
  4. Arbeiten Sie mit Daten im System

... Arbeitsablauf

Mit Add-In Express können Sie eine Schaltfläche in Excel erstellen, ohne sich mit VSTO herumschlagen zu müssen. Dann wird der Workflow:

  1. Vorbereiten / Arbeiten in einer Tabellenkalkulationsdatei
  2. Datei importieren (über die Schaltfläche in Excel )
  3. Arbeiten Sie mit Daten im System

Lassen Sie den Code hinter der Schaltfläche die "native" Excel-API (über Add-In Express) verwenden und direkt in das Empfängersystem übertragen. Sie können für den Entwickler oder den Benutzer nicht viel transparenter werden. Bedenkenswert.

Program.X
quelle
1

Es gibt einen ziemlich guten Artikel und eine Bibliothek auf CodeProject von Yogesh Jagota:

Excel XML Import-Export-Bibliothek

Ich habe es verwendet, um Daten aus SQL-Abfragen und anderen Datenquellen nach Excel zu exportieren - funktioniert für mich einwandfrei.

Prost

marc_s
quelle
1
Interessant, erfordert aber XML-Dateien. Xls- oder xlsx-Dateien können nicht gelesen / geschrieben werden.
Jason Kealey
1

Sie können die folgende Bibliothek ausprobieren, sie ist einfach genug und nur ein einfacher Wrapper über das Open XML SDK von Microsoft (Sie können sogar Formatierungen, Stile und sogar ganze Arbeitsblätter aus sekundären Excel-Dateien wiederverwenden): http://officehelper.codeplex.com

aron.sinoai
quelle
Kürzlich wurde eine neue Version der Bibliothek veröffentlicht.
Aron.sinoai
0

Spreadsheetgear ist die beste kommerzielle Bibliothek, die wir gefunden haben und verwenden. Unser Unternehmen führt viele fortschrittliche Excel-Importe und -Exporte durch, und Spreadsheetgear unterstützt viele erweiterte Excel-Funktionen, die weit über alles hinausgehen, was Sie mit einfachem CSV tun können, und das schnell. Es ist zwar nicht kostenlos oder sehr billig, aber es lohnt sich, weil der Support ausgezeichnet ist. Die Entwickler werden Ihnen tatsächlich antworten, wenn Sie auf ein Problem stoßen.

pilavdzice
quelle
0

Wie wäre es mit der Apache POI Java-Bibliothek. Ich habe es nicht für Excel verwendet, aber für Word 2007.

Harijay
quelle