Frage Erstellen Sie Excel (.XLS und .XLSX) Datei von C #


Wie kann ich eine Excel-Tabelle mit C # erstellen, ohne dass Excel auf dem Computer installiert werden muss, auf dem der Code ausgeführt wird?


1566


Ursprung


Antworten:


Sie können eine Bibliothek namens ExcelLibrary verwenden. Es ist eine kostenlose Open-Source-Bibliothek, die auf Google Code veröffentlicht wurde:

ExcelLibrary

Dies scheint ein Port des PHP ExcelWriter zu sein, den Sie oben erwähnt haben. Es wird noch nicht in das neue .xlsx-Format geschrieben, aber sie arbeiten daran, diese Funktionalität hinzuzufügen.

Es ist sehr einfach, klein und einfach zu bedienen. Außerdem verfügt es über einen DataSetHelper, mit dem Sie DataSets und DataTables verwenden können, um problemlos mit Excel-Daten zu arbeiten.

ExcelLibrary scheint immer noch nur für das ältere Excel-Format (.xls-Dateien) zu funktionieren, könnte aber in Zukunft Unterstützung für neuere 2007/2010-Formate hinzufügen.

Sie können auch verwenden EPPlus, die nur für Excel 2007/2010-Formatdateien (.xlsx-Dateien) funktioniert.

Es gibt ein paar bekannte Bugs mit jeder Bibliothek, wie in den Kommentaren erwähnt. Insgesamt scheint EPPlus im Laufe der Zeit die beste Wahl zu sein. Es scheint auch aktiver aktualisiert und dokumentiert zu werden.

Wie von @ АртёмЦарионов unten erwähnt, hat EPPlus Unterstützung für Pivot-Tabellen und ExcelLibrary kann Unterstützung (Pivot-Tabellenproblem in ExcelLibrary)

Hier sind ein paar Links für Kurzreferenz:
ExcelLibrary - GNU Lesser GPL
EPPlus - GNU Lesser General Public Lizenz (LGPL)

Hier ein Beispielcode für ExcelLibrary:

Hier ist ein Beispiel, das Daten aus einer Datenbank aufnimmt und daraus eine Arbeitsmappe erstellt. Beachten Sie, dass der ExcelLibrary-Code die einzige Zeile unten ist:

//Create the data set and table
DataSet ds = new DataSet("New_DataSet");
DataTable dt = new DataTable("New_DataTable");

//Set the locale for each
ds.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;
dt.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;

//Open a DB connection (in this example with OleDB)
OleDbConnection con = new OleDbConnection(dbConnectionString);
con.Open();

//Create a query and fill the data table with the data from the DB
string sql = "SELECT Whatever FROM MyDBTable;";
OleDbCommand cmd = new OleDbCommand(sql, con);
OleDbDataAdapter adptr = new OleDbDataAdapter();

adptr.SelectCommand = cmd;
adptr.Fill(dt);
con.Close();

//Add the table to the data set
ds.Tables.Add(dt);

//Here's the easy part. Create the Excel worksheet from the data set
ExcelLibrary.DataSetHelper.CreateWorkbook("MyExcelFile.xls", ds);

Das Erstellen der Excel-Datei ist so einfach. Sie können Excel-Dateien auch manuell erstellen, aber die obige Funktionalität hat mich wirklich beeindruckt.


874



Wenn Sie mit dem xlsx-Format zufrieden sind, versuchen Sie es mit meinem Codeplex GitHub Projekt. EPPlus. Begann es mit der Quelle von ExcelPackage, aber heute ist es eine komplette Neuschreibung. Unterstützt Bereiche, Zellstyling, Diagramme, Formen, Bilder, Namensbereiche, Autofilter und vieles mehr.


490



Ich habe die folgenden Open-Source-Projekte erfolgreich eingesetzt:

  • ExcelPackage für OOXML-Formate (Office 2007)

  • NPOI für .XLS-Format (Office 2003). NPOI 2.0 (Alpha) unterstützt auch XLSX.

Sehen Sie sich meine Blog-Posts an:

Erstellen von Excel-Arbeitsblättern .XLS und .XLSX in C #

NPOI mit Excel-Tabelle und dynamischem Diagramm


146



Und was ist mit Open XML SDK 2.0 für Microsoft Office?

Ein paar Vorteile:

  • Es muss kein Office installiert sein
  • Hergestellt von Microsoft = anständige MSDN-Dokumentation
  • Nur eine .Net-DLL für das Projekt
  • SDK kommt mit vielen Tools wie diff, validator, etc

Links:


140



Sie können OLEDB zum Erstellen und Bearbeiten von Excel-Dateien verwenden. Überprüfen Sie dies: Lesen und Schreiben von Excel mit OLEDB.

Typisches Beispiel:

using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\temp\\test.xls;Extended Properties='Excel 8.0;HDR=Yes'"))
{
  conn.Open();
  OleDbCommand cmd = new OleDbCommand("CREATE TABLE [Sheet1] ([Column1] string, [Column2] string)", conn);
  cmd.ExecuteNonQuery();
}

Bearbeiten - Einige weitere Links:


94



Die kommerzielle Lösung, SpreadsheetGear für .NET werde es tun.

Sie können Live ASP.NET (C # und VB) Beispiele sehen Hier und laden Sie eine Testversion herunter Hier.

Haftungsausschluss: Ich besitze SpreadsheetGear LLC


72



Ein paar Optionen, die ich benutzt habe:

Wenn XLSX ein Muss ist: Excel-Paket Es ist ein guter Anfang, aber verstummte, als der Entwickler aufhörte, daran zu arbeiten. ExML hat von dort abgeholt und ein paar Features hinzugefügt. ExML ist keine schlechte Wahl, ich benutze es immer noch auf einigen Produktionswebsites.

Für all meine neuen Projekte verwende ich jedoch NPOI, der .NET-Port von Apache POI. NPOI 2.0 (Alpha) unterstützt auch XLSX.


55



Eine extrem leichte Option könnte die Verwendung von HTML-Tabellen sein. Erstellen Sie einfach Kopf-, Körper- und Tabellen-Tags in einer Datei und speichern Sie sie als Datei mit der Erweiterung .xls. Es gibt Microsoft-spezifische Attribute, die Sie zum Formatieren der Ausgabe verwenden können, einschließlich Formeln.

Ich weiß, dass Sie das vielleicht nicht in einer Webanwendung programmieren, aber hier ist ein Beispiel der Zusammensetzung einer Excel-Datei über eine HTML-Tabelle. Diese Technik könnte verwendet werden, wenn Sie eine Konsolen-App, eine Desktop-App oder einen Dienst codieren.


53



Sie können verwenden ExcelXmlWriter.

Es funktioniert gut.


41