Vous pouvez utiliser une bibliothèque appelée ExcelLibrary. Il s'agit d'une bibliothèque gratuite et open source publiée sur Google Code :
Bibliothèque Excel
Cela semble être un portage de l'ExcelWriter PHP que vous avez mentionné ci-dessus. Il n'écrit pas encore au nouveau format .xlsx, mais ils travaillent à l'ajout de cette fonctionnalité.
Il est très simple, petit et facile à utiliser. De plus, il possède un DataSetHelper qui vous permet d'utiliser des DataSets et des DataTables pour travailler facilement avec des données Excel.
ExcelLibrary semble encore ne fonctionner que pour l'ancien format Excel (fichiers .xls), mais il est possible qu'elle ajoute à l'avenir un support pour les nouveaux formats 2007/2010.
Vous pouvez également 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. Dans l'ensemble, EPPlus semble être le meilleur choix au fil du temps. Elle semble être plus activement mise à jour et documentée.
En outre, comme l'a noté @АртёмЦарионов ci-dessous, EPPlus a un support pour les tableaux croisés dynamiques et ExcelLibrary peut avoir un certain support ( Problème de tableau croisé dynamique dans ExcelLibrary )
Voici quelques liens pour une référence rapide :
Bibliothèque Excel - GNU Lesser GPL
EPPlus - Licence publique générale de bibliothèque GNU (LGPL)
Voici quelques exemples de code pour ExcelLibrary :
Voici un exemple qui prend des données d'une base de données et crée un classeur à partir de celles-ci. Notez que le code de la bibliothèque Excel 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);
La création du fichier Excel est aussi simple que cela. Vous pouvez également créer manuellement des fichiers Excel, mais c'est la fonctionnalité ci-dessus qui m'a vraiment impressionné.
64 votes
@Mike L'élément "sans nécessiter l'installation d'Excel" n'a rien à voir avec le fait d'être professionnel. C'est une question de dépendances. Le texte original de la question était formulé comme suit : "Idéalement, je voudrais une source ouverte pour ne pas avoir à ajouter de dépendances tierces à mon code, et je voudrais éviter d'utiliser Excel directement pour créer le fichier (en utilisant OLE Automation.)" C'est dommage que la question ait été simplifiée de façon drastique.
8 votes
En supposant que vous essayiez de faire quelque chose sans bibliothèque ou code externe, je ne peux pas parler pour les fichiers xls, mais pour les fichiers xlsx, pourquoi ne pas commencer par prendre un fichier existant, le renommer en fichier zip et explorer son contenu ? Un peu de rétro-ingénierie vous en apprendra beaucoup. Il y a plusieurs fichiers xml et fichiers rels différents dans les divers dossiers et sous-dossiers. Essayez de les explorer et voyez si vous pouvez les reproduire ou si vous pouvez trouver de la documentation sur les différents espaces de noms/schémas xml.