Vraag Maak een Excel (.XLS en .XLSX) bestand van C #


Hoe kan ik een Excel-spreadsheet met C # maken zonder dat Excel moet worden geïnstalleerd op de computer waarop de code wordt uitgevoerd?


1566


oorsprong


antwoorden:


U kunt een bibliotheek met de naam ExcelLibrary gebruiken. Het is een gratis, open-sourcebibliotheek gepost op Google Code:

ExcelLibrary

Dit lijkt een poort te zijn van de PHP ExcelWriter die u hierboven vermeldde. Het zal nog niet naar het nieuwe .xlsx-formaat schrijven, maar ze werken eraan deze functionaliteit toe te voegen.

Het is heel eenvoudig, klein en gemakkelijk te gebruiken. Bovendien heeft het een DataSetHelper waarmee u DataSets en DataTables kunt gebruiken om eenvoudig met Excel-gegevens te werken.

ExcelLibrary lijkt nog steeds alleen te werken voor de oudere Excel-indeling (.xls-bestanden), maar kan in de toekomst mogelijk ondersteuning toevoegen voor nieuwere indelingen voor 2007/2010.

Je kan ook gebruiken EPPlus, die alleen werkt voor bestandsindelingen in Excel 2007/2010 (XLSX-bestanden).

Er zijn enkele bekende bugs bij elke bibliotheek zoals vermeld in de opmerkingen. In totaal lijkt EPPlus de beste keuze als de tijd verstrijkt. Het lijkt actiever geactualiseerd en gedocumenteerd te zijn.

Zoals ook opgemerkt door @ АртёмЦарионов hieronder, heeft EPPlus ondersteuning voor draaitabellen en kan ExcelLibrary enige ondersteuning bieden (Draaitabelprobleem in ExcelLibrary)

Hier zijn een aantal links voor een snelle referentie:
ExcelLibrary - GNU Lesser GPL
EPPlus - GNU Lesser General Public License (LGPL)

Hier een voorbeeldcode voor ExcelLibrary:

Hier is een voorbeeld dat gegevens uit een database haalt en er een werkboek van maakt. Merk op dat de ExcelLibrary-code de enige regel onderaan is:

//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);

Het maken van het Excel-bestand is net zo eenvoudig als dat. U kunt ook handmatig Excel-bestanden maken, maar de bovenstaande functionaliteit is wat mij echt heeft getroffen.


874



Als je tevreden bent met het xlsx-formaat, probeer dan mijn CodePlex GitHub-project. EPPlus. Begonnen met de bron van ExcelPackage, maar vandaag is het een totale herschrijving. Ondersteunt reeksen, celstijlen, grafieken, vormen, afbeeldingen, naamsferen, autofilter en een heleboel andere dingen.


490



Ik heb met succes de volgende open source projecten gebruikt:

  • ExcelPackage voor OOXML-formaten (Office 2007)

  • NPOI voor .XLS-indeling (Office 2003). NPOI 2.0 (Alpha) ondersteunt ook XLSX.

Bekijk mijn blogposts:

Excel-spreadsheets .XLS en .XLSX maken in C #

NPOI met Excel-tabel en dynamische grafiek


146



En hoe zit het met het gebruik van Open XML SDK 2.0 voor Microsoft Office?

Een paar voordelen:

  • Vereist geen Office geïnstalleerd
  • Gemaakt door Microsoft = degelijke MSDN-documentatie
  • Slechts één .Net dll om in project te gebruiken
  • SDK wordt geleverd met veel hulpmiddelen zoals diff, validator, enzovoort

Links:


140



U kunt OLEDB gebruiken om Excel-bestanden te maken en te bewerken. Controleer dit: Excel lezen en schrijven met OLEDB.

Typisch voorbeeld:

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();
}

EDIT - Nog enkele links:


94



De commerciële oplossing, SpreadsheetGear voor .NET zal het doen.

U kunt voorbeelden van live ASP.NET (C # en VB) bekijken hier en download een evaluatieversie hier.

Disclaimer: ik bezit SpreadsheetGear LLC


72



Een paar opties die ik heb gebruikt:

Als XLSX een must is: ExcelPackage is een goed begin, maar stierf weg toen de ontwikkelaar ermee ophield te werken. ExML heeft van daar opgehaald en een paar functies toegevoegd. ExML is geen slechte optie, ik gebruik het nog steeds op een aantal productiewebsites.

Voor al mijn nieuwe projecten gebruik ik echter NPOI, de .NET-poort van Apache POI. NPOI 2.0 (Alpha) ondersteunt ook XLSX.


55



Een extreem lichte optie is mogelijk om HTML-tabellen te gebruiken. Maak hoofd-, lichaam- en tabellabels in een bestand en sla het op als een bestand met de extensie .xls. Er zijn Microsoft-specifieke kenmerken die u kunt gebruiken om de uitvoer te stylen, inclusief formules.

Ik besef dat je dit misschien niet in een webapplicatie codeert, maar hier is een voorbeeld van de samenstelling van een Excel-bestand via een HTML-tabel. Deze techniek kan worden gebruikt als u een console-app, desktop-app of service codeert.


53