Question Créer un fichier Excel (.XLS et .XLSX) à partir de C #


Comment puis-je créer une feuille de calcul Excel avec C # sans nécessiter l'installation d'Excel sur la machine qui exécute le code?


1566


origine


Réponses:


Vous pouvez utiliser une bibliothèque appelée ExcelLibrary. C'est une bibliothèque gratuite et open source publiée sur Google Code:

ExcelLibrary

Cela ressemble à un port de PHP ExcelWriter que vous avez mentionné ci-dessus. Il n'écrira pas encore le nouveau format .xlsx, mais ils travaillent sur l'ajout de cette fonctionnalité.

C'est très simple, petit et facile à utiliser. De plus, il dispose d'un DataSetHelper qui vous permet d'utiliser DataSets et DataTables pour travailler facilement avec des données Excel.

ExcelLibrary ne semble toujours fonctionner que pour le format Excel (fichiers .xls) plus ancien, mais pourrait ajouter du support pour les nouveaux formats 2007/2010.

Vous pouvez aussi utiliser EPPlus, qui ne fonctionne que pour les fichiers au format Excel 2007/2010 (fichiers .xlsx).

Il y a quelques bogues connus avec chaque bibliothèque comme indiqué dans les commentaires. En tout, EPPlus semble être le meilleur choix au fil du temps. Il semble être plus activement mis à jour et documenté aussi bien.

En outre, comme indiqué par @ АртёмЦарионов ci-dessous, EPPlus a le soutien pour les tableaux croisés dynamiques et ExcelLibrary peut avoir un certain soutien (Problème de tableau croisé dynamique dans ExcelLibrary)

Voici quelques liens pour une référence rapide:
ExcelLibrary - GNU Lesser GPL
EPPlus - Licence Publique Générale Limitée GNU (LGPL)

Voici un exemple de code pour ExcelLibrary:

Voici un exemple prenant des données d'une base de données et en créant un classeur. Notez que le code ExcelLibrary est la seule ligne en bas:

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

Créer le fichier Excel est aussi simple que cela. Vous pouvez également créer manuellement des fichiers Excel, mais la fonctionnalité ci-dessus est ce qui m'a vraiment impressionné.


874



Si vous êtes satisfait du format xlsx, essayez mon codéplex Projet GitHub. EPPlus. Commencé avec la source de ExcelPackage, mais aujourd'hui c'est une réécriture totale. Prend en charge les gammes, le style de cellule, les graphiques, les formes, les images, les noms de domaine, l'autofiltre et bien d'autres choses.


490



J'ai utilisé avec succès les projets open source suivants:

  • ExcelPackage pour les formats OOXML (Office 2007)

  • NPOI pour le format .XLS (Office 2003). NPOI 2.0 (Alpha) prend également en charge XLSX.

Jetez un oeil à mes articles de blog:

Création de feuilles de calcul Excel .XLS et .XLSX en C #

NPOI avec Excel Table et graphique dynamique


146



Et qu'en est-il de l'utilisation de Open XML SDK 2.0 pour Microsoft Office?

Quelques avantages:

  • Ne nécessite pas Office installé
  • Fait par Microsoft = documentation MSDN décent
  • Juste un. Net dll à utiliser dans le projet
  • SDK est livré avec de nombreux outils comme diff, validateur, etc

Liens:


140



Vous pouvez utiliser OLEDB pour créer et manipuler des fichiers Excel. Vérifie ça: Lire et écrire Excel en utilisant OLEDB.

Exemple typique:

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 - Quelques autres liens:


94



La solution commerciale, SpreadsheetGear pour .NET le fera.

Vous pouvez voir des échantillons ASP.NET (C # et VB) en direct ici et télécharger une version d'évaluation ici.

Disclaimer: Je possède SpreadsheetGear LLC


72



Quelques options que j'ai utilisées:

Si XLSX est un must: ExcelPackage est un bon début mais est mort quand le développeur a cessé de travailler dessus. ExML a repris à partir de là et ajouté quelques fonctionnalités. ExML Ce n'est pas une mauvaise option, je l'utilise encore dans quelques sites de production.

Pour tous mes nouveaux projets, cependant, j'utilise NPOI, le port .NET de Apache POI. NPOI 2.0 (Alpha) prend également en charge XLSX.


55



Une option extrêmement légère peut être d'utiliser des tables HTML. Il suffit de créer des balises de tête, de corps et de table dans un fichier et de les enregistrer en tant que fichier avec une extension .xls. Il existe des attributs spécifiques à Microsoft que vous pouvez utiliser pour styliser la sortie, y compris les formules.

Je réalise que vous ne pouvez pas coder ceci dans une application web, mais voici un Exemple de la composition d'un fichier Excel via un tableau HTML. Cette technique peut être utilisée si vous codez une application de console, une application de bureau ou un service.


53



Vous pouvez utiliser ExcelXmlWriter.

Ça fonctionne bien.


41



Vous voudrez peut-être vérifier la classes d'interopérabilité. Vous ne dites pas OLE (ce qui n'est pas le cas), mais les classes interop sont très faciles à utiliser.

Vous pourriez être impressionné si vous ne les avez pas essayés.

S'il vous plaît être averti de Microsoft position sur ce:

Microsoft ne recommande pas et ne prend pas en charge actuellement   Automatisation des applications Microsoft Office à partir de tout sans surveillance,   application ou composant client non interactif (notamment ASP,   Services ASP.NET, DCOM et NT), car Office peut afficher unstable   comportement et / ou blocage lorsque Office est exécuté dans cet environnement.


39