ohne - c# write xls file without excel




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

Die einfachste und schnellste Möglichkeit zum Erstellen einer Excel-Datei aus C # ist die Verwendung des Open XML Productivity Tools. Das Open XML Productivity Tool wird mit der Open XML SDK-Installation geliefert. Das Tool Reverse Engineering jede Excel-Datei in C # -Code. Der C # -Code kann dann verwendet werden, um diese Datei erneut zu generieren.

Ein Überblick über den Prozess ist:

  1. Installieren Sie das Open XML SDK mit dem Tool.
  2. Erstellen Sie eine Excel-Datei mit dem neuesten Excel-Client mit dem gewünschten Aussehen. DesiredLook.xlsx es DesiredLook.xlsx .
  3. Öffnen DesiredLook.xlsx mit dem Tool DesiredLook.xlsx und klicken Sie oben auf die Schaltfläche Code DesiredLook.xlsx .
  4. Der C # -Code für Ihre Datei wird im rechten Bereich des Tools generiert. Fügen Sie dies Ihrer C # -Lösung hinzu und generieren Sie Dateien mit diesem gewünschten Aussehen.

Als Bonus funktioniert diese Methode für alle Word- und PowerPoint-Dateien. Als C # -Entwickler nehmen Sie dann Änderungen am Code vor, die Ihren Anforderungen entsprechen.

Ich habe eine einfache WPF-App auf github entwickelt, die zu diesem Zweck unter Windows läuft. Es gibt eine Platzhalterklasse namens GeneratedClass in die Sie den generierten Code einfügen können. Wenn Sie eine Version der Datei zurückholen, wird eine Excel-Datei wie diese erzeugt:

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?


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

Sie können Live-ASP.NET-Beispiele (C # und VB) here anzeigen und eine Evaluierungsversion here herunterladen.

Haftungsausschluss: Ich besitze SpreadsheetGear LLC


Ein paar Optionen, die ich benutzt habe:

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

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


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 example für die 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.



Gut,

Sie können auch eine Drittanbieter-Bibliothek wie Aspose verwenden .

Diese Bibliothek hat den Vorteil, dass Excel nicht auf Ihrem Computer installiert werden muss, was in Ihrem Fall ideal wäre.


Hier ist eine Möglichkeit, dies mit LINQ to XML zu tun, einschließlich Beispielcode:

Schnelles Importieren und Exportieren von Excel-Daten mit LINQ to XML

Es ist ein wenig komplex, da Sie Namespaces usw. importieren müssen, aber Sie können damit externe Abhängigkeiten vermeiden.

(Natürlich ist es auch VB .NET, nicht C #, aber Sie können immer die VB .NET-Dateien in einem eigenen Projekt isolieren, um XML-Literale zu verwenden und alles andere in C # zu machen.)


Hier ist eine vollständig kostenlose C # -Bibliothek, mit der Sie mit den OpenXML-Bibliotheken aus einem DataSet , DataTable oder List<> in eine echte Excel 2007.xlsx-Datei exportieren können:

http://mikesknowledgebase.com/pages/CSharp/ExportToExcel.htm

Der vollständige Quellcode wird kostenlos zur Verfügung gestellt - zusammen mit Anweisungen und einer Demo-Anwendung.

Nachdem Sie diese Klasse zu Ihrer Anwendung hinzugefügt haben, können Sie Ihr DataSet in nur einer Codezeile nach Excel exportieren:

CreateExcelFile.CreateExcelDocument(myDataSet, "C:\\Sample.xlsx");

Es wird nicht viel einfacher als das ...

Und es muss nicht einmal Excel auf Ihrem Server vorhanden sein.



Ich habe gerade FlexCel.NET und festgestellt, dass es eine ausgezeichnete Bibliothek ist! Ich sage das nicht über zu viele Softwareprodukte. Kein Grund, den gesamten Verkaufsargument hier zu geben, Sie können alle Funktionen auf ihrer Website lesen.

Es ist ein kommerzielles Produkt, aber Sie erhalten die vollständige Quelle, wenn Sie es kaufen. Ich nehme an, Sie könnten es in Ihre Assembly kompilieren, wenn Sie das wirklich wollen. Ansonsten ist es nur eine extra Assembly für xcopy - keine Konfiguration oder Installation oder ähnliches.

Ich denke nicht, dass Sie einen Weg finden, dies ohne Bibliotheken von Drittanbietern zu tun, da das .NET-Framework natürlich keine eingebaute Unterstützung dafür hat und die OLE-Automatisierung nur eine ganze Welt der Schmerzen ist.


OpenXML ist auch eine gute Alternative, um die Installation von MS Excel auf dem Server zu vermeiden. Das von Microsoft bereitgestellte Open XML SDK 2.0 vereinfacht die Bearbeitung von Open XML-Paketen und der zugrunde liegenden Open XML-Schemaelemente in einem Paket. Die Open XML-Anwendungsprogrammierschnittstelle (API) kapselt viele allgemeine Aufgaben ein, die Entwickler für Open XML-Pakete ausführen.

Überprüfen Sie dies OpenXML: Alternative, die hilft, MS Excel auf dem Server zu installieren



Sie können OLEDB zum Erstellen und Bearbeiten von Excel-Dateien verwenden. Überprüfen Sie Folgendes : 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:


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 EPPlus , das nur für Dateien im Format Excel 2007/2010 (.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 bereits von @ АртёмЦарионов unten erwähnt, unterstützt EPPlus Pivot-Tabellen und ExcelLibrary unterstützt möglicherweise ( 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.


Sie können formatierte Excel-Dateien mit dieser Bibliothek erstellen: http://officehelper.codeplex.com/documentation
Siehe unten:

using (ExcelHelper helper = new ExcelHelper(TEMPLATE_FILE_NAME, GENERATED_FILE_NAME))
{
    helper.Direction = ExcelHelper.DirectionType.TOP_TO_DOWN;
    helper.CurrentSheetName = "Sheet1";
    helper.CurrentPosition = new CellRef("C3");

    //the template xlsx should contains the named range "header"; use the command "insert"/"name".
    helper.InsertRange("header");

    //the template xlsx should contains the named range "sample1";
    //inside this range you should have cells with these values:
    //<name> , <value> and <comment>, which will be replaced by the values from the getSample()
    CellRangeTemplate sample1 = helper.CreateCellRangeTemplate("sample1", new List<string> {"name", "value", "comment"}); 
    helper.InsertRange(sample1, getSample());

    //you could use here other named ranges to insert new cells and call InsertRange as many times you want, 
    //it will be copied one after another;
    //even you can change direction or the current cell/sheet before you insert

    //typically you put all your "template ranges" (the names) on the same sheet and then you just delete it
    helper.DeleteSheet("Sheet3");
}        

Wo das Beispiel so aussieht:

private IEnumerable<List<object>> getSample()
{
    var random = new Random();

    for (int loop = 0; loop < 3000; loop++)
    {
        yield return new List<object> {"test", DateTime.Now.AddDays(random.NextDouble()*100 - 50), loop};
    }
}



Wenn Sie Excel 2007/2010-Dateien erstellen, probieren Sie dieses Open-Source-Projekt aus: http://closedxml.codeplex.com

Es bietet eine objektorientierte Möglichkeit, die Dateien zu manipulieren (ähnlich wie bei VBA), ohne sich um die Probleme von XML-Dokumenten kümmern zu müssen. Es kann von jeder .NET-Sprache wie C # und Visual Basic (VB) verwendet werden.

Mit ClosedXML können Sie Excel 2007/2010-Dateien ohne die Excel-Anwendung erstellen. Ein typisches Beispiel ist das Erstellen von Excel-Berichten auf einem Webserver:

var workbook = new XLWorkbook();
var worksheet = workbook.Worksheets.Add("Sample Sheet");
worksheet.Cell("A1").Value = "Hello World!";
workbook.SaveAs("HelloWorld.xlsx");

IKVM + POI

Oder Sie könnten das Interop benutzen ...


Syncfusion Essential XlsIO kann dies tun. Es hat keine Abhängigkeit von Microsoft Office und hat auch spezifische Unterstützung für verschiedene Plattformen.

Codebeispiel:

//Creates a new instance for ExcelEngine.
ExcelEngine excelEngine = new ExcelEngine();
//Loads or open an existing workbook through Open method of IWorkbooks
IWorkbook workbook = excelEngine.Excel.Workbooks.Open(fileName);
//To-Do some manipulation|
//To-Do some manipulation
//Set the version of the workbook.
workbook.Version = ExcelVersion.Excel2013;
//Save the workbook in file system as xlsx format
workbook.SaveAs(outputFileName);

Die gesamte Kontrollgruppe ist kostenlos über das Community-Lizenzprogramm verfügbar, wenn Sie sich dafür qualifizieren (weniger als 1 Million USD Umsatz). Hinweis: Ich arbeite für Syncfusion.







file-io