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




excellibrary (20)

Avez-vous déjà essayé sylk?

Nous avions l'habitude de générer des excelsheets dans asp classique comme sylk et en ce moment nous cherchons aussi un excelgenerater.

Les avantages pour sylk sont, vous pouvez mettre en forme les cellules.

https://code.i-harness.com

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?


Bien,

vous pouvez également utiliser une bibliothèque tierce comme Aspose .

Cette bibliothèque a l'avantage de ne pas nécessiter l'installation d'Excel sur votre machine, ce qui serait idéal dans votre cas.


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:


J'ai récemment utilisé FlexCel.NET et FlexCel.NET trouvé que c'était une excellente bibliothèque! Je ne dis pas cela sur trop de produits logiciels. Il est inutile de donner ici l'argumentaire de vente, vous pouvez lire toutes les fonctionnalités sur leur site Web.

C'est un produit commercial, mais vous obtenez la source complète si vous l'achetez. Donc je suppose que vous pourriez le compiler dans votre assemblée si vous le vouliez vraiment. Sinon, c'est juste un assemblage supplémentaire pour xcopy - pas de configuration ou d'installation ou quelque chose comme ça.

Je ne pense pas que vous trouveriez un moyen de le faire sans les bibliothèques tierces car le framework .NET, évidemment, n'a pas de support intégré et OLE Automation est juste un monde de douleur.



Je veux juste ajouter une autre référence à une solution tierce qui traite directement votre problème: http://www.officewriter.com

(Disclaimer: je travaille pour SoftArtisans, la société qui fabrique OfficeWriter)


Le moyen le plus simple et le plus rapide de créer un fichier Excel à partir de C # est d'utiliser l'outil de productivité Open XML. L'outil de productivité Open XML est livré avec l'installation Open XML SDK. L'outil reverse engineering n'importe quel fichier Excel en code C #. Le code C # peut ensuite être utilisé pour générer de nouveau ce fichier.

Un aperçu du processus impliqué est:

  1. Installez le SDK Open XML avec l'outil.
  2. Créez un fichier Excel en utilisant le dernier client Excel avec le look désiré. Nommez-le DesiredLook.xlsx .
  3. Avec l'outil ouvrir DesiredLook.xlsx et cliquez sur le bouton Reflect Code près du haut.
  4. Le code C # de votre fichier sera généré dans le volet droit de l'outil. Ajoutez ceci à votre solution C # et générez des fichiers avec l'apparence souhaitée.

En prime, cette méthode fonctionne pour tous les fichiers Word et PowerPoint. En tant que développeur C #, vous allez ensuite apporter des modifications au code pour l'adapter à vos besoins.

J'ai développé une application WPF simple sur github qui fonctionnera sous Windows à cette fin. Il existe une classe d'espace réservé appelée GeneratedClass laquelle vous pouvez coller le code généré. Si vous revenez en arrière une version du fichier, il va générer un fichier Excel comme ceci:


Les diverses bibliothèques XML Office 2003 disponibles fonctionnent plutôt bien pour les fichiers Excel plus petits. Cependant, je trouve que la taille d'un grand classeur enregistré au format XML est un problème. Par exemple, un classeur avec lequel je travaillerais équivaudrait à 40 Mo dans le nouveau format XLSX (et il est vrai que le format XLSX est plus serré) devient un fichier XML de 360 ​​Mo.

En ce qui concerne mes recherches, il y a deux paquets commerciaux qui permettent la sortie vers les anciens formats de fichiers binaires. Elles sont:

Ni sont bon marché (500USD et 800USD respectivement, je pense). mais les deux fonctionnent indépendamment d'Excel lui-même.

Ce que je serais curieux de savoir est le module de sortie Excel pour les goûts d'OpenOffice.org. Je me demande s'ils peuvent être portés de Java vers .Net.



Quelques options que j'ai utilisées:

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

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


Si vous êtes satisfait du format xlsx, essayez mon projet GitHub codéplex . 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.


Si vous créez des fichiers Excel 2007/2010, essayez ce projet open source: http://closedxml.codeplex.com

Il fournit un moyen orienté objet pour manipuler les fichiers (similaire à VBA) sans traiter les tracas des documents XML. Il peut être utilisé par n'importe quel langage .NET comme C # et Visual Basic (VB).

ClosedXML vous permet de créer des fichiers Excel 2007/2010 sans l'application Excel. L'exemple typique est la création de rapports Excel sur un serveur Web:

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

Voici un moyen de le faire avec LINQ to XML, avec un exemple de code:

Importez et exportez rapidement des données Excel avec LINQ to XML

C'est un peu complexe, car vous devez importer des espaces de noms et ainsi de suite, mais cela vous permet d'éviter les dépendances externes.

(Aussi, bien sûr, c'est VB .NET, pas C #, mais vous pouvez toujours isoler le contenu VB .NET dans son propre projet pour utiliser XML Literals, et faire tout le reste en C #.)


Voici une bibliothèque C # entièrement gratuite, qui vous permet d'exporter depuis un DataSet , DataTable ou List<> dans un fichier .xlsx Excel 2007 authentique, en utilisant les bibliothèques OpenXML:

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

Le code source complet est fourni - gratuitement - avec des instructions et une application de démonstration.

Après avoir ajouté cette classe à votre application, vous pouvez exporter votre DataSet vers Excel en une seule ligne de code:

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

Ça ne devient pas plus simple que ça ...

Et cela n'exige même pas qu'Excel soit présent sur votre serveur.


Vous pouvez créer des fichiers Excel bien formatés en utilisant cette bibliothèque: http://officehelper.codeplex.com/documentation
Voir ci-dessous l'échantillon:

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

où l'échantillon ressemble à ceci:

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

Vous pouvez jeter un oeil à http://www.gemboxsoftware.com/GBSpreadsheetFree.htm .

Ils ont une version gratuite avec toutes les fonctionnalités, mais limitée à 150 lignes par feuille et 5 feuilles par classeur, si cela répond à vos besoins.

Je n'ai pas encore eu besoin de l'utiliser, mais j'ai l'air intéressant.


Vous pouvez utiliser OLEDB pour créer et manipuler des fichiers Excel. Cochez ceci: Lecture et écriture 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:


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 é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. 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 EPPlus 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é.


IKVM + POI

Ou, vous pouvez utiliser l'Interop ...


Syncfusion Essential XlsIO peut le faire. Il n'a aucune dépendance sur Microsoft Office et dispose également d'un support spécifique pour différentes plates-formes.

Échantillon de code:

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

La suite complète de contrôles est disponible gratuitement via le programme de licence communautaire si vous êtes admissible (moins de 1 million USD de revenus). Note: Je travaille pour Syncfusion.







file-io