Création de fichiers Excel en C#
Créer et travailler avec des fichiers Excel est une compétence cruciale pour tout développeur C# construisant des outils de reporting, des exportations de données ou des interfaces de saisie utilisateur. Dans cet article, nous allons nous plonger dans une démonstration détaillée fournie par Tim Corey dans sa vidéo "Creating Excel files in C#", où il montre comment créer un fichier Excel à l'aide de C#, le formater et même lire les données qu'il contient, le tout en utilisant la bibliothèque EPPlus.
Que vous cherchiez à créer un nouveau classeur Excel à partir d'une List, à formater les cellules de la feuille de calcul Excel ou à relire des données structurées dans votre application, l'exemple de Tim sert de tutoriel pratique pour couvrir les bases de la génération de fichiers Excel en C#.
Décrivons la situation étape par étape en nous référant à la vidéo de Tim.
Introduction : Pourquoi utiliser Excel en C#?
Tim commence par expliquer que Microsoft Excel est l'un des outils les plus importants dans le monde des affaires. Les fichiers Excel sont conviviaux, très polyvalents et parfaits pour représenter des données. Il souligne comment la création de fichiers Excel en C# peut être utilisée comme substitut à des solutions de reporting complexes - faisant d'Excel votre outil de reporting par défaut.
L'objectif : créer une application Excel à l'aide de C#, la remplir avec des données, appliquer un certain formatage, puis lire à partir de ce fichier Excel.
Mise en place du projet dans l'explorateur de solutions
Tim ouvre Visual Studio 2019, sélectionne une application console (.NET Core) et nomme la solution ExcelDemoApp. L'utilisation d'une application console offre un environnement propre et sans distraction pour se concentrer uniquement sur le code lié à Excel.
Il met à niveau le .NET Framework vers .NET 5.0 pour tirer parti des fonctionnalités de C# 9, telles que l'instanciation simplifiée des objets.
Ajouter EPPlus à partir des paquets NuGet
Pour créer un classeur Excel, Tim installe le package EPPlus via le gestionnaire de packages NuGet. EPPlus est une bibliothèque Excel qui fonctionne avec des fichiers .xlsx (Open XML) et prend en charge toutes les fonctionnalités d'Excel, telles que les graphiques, les tableaux, les styles et les formules, sans avoir besoin de MS Office ou d'Excel Interop.
Remarque : EPPlus est gratuit pour une utilisation non commerciale, mais nécessite une licence pour les applications commerciales.
Il copie la ligne d'acceptation de la licence non commerciale requise dans son code pour éviter les erreurs d'exécution et ajoute les éléments nécessaires à l'aide d'OfficeOpenXml ; directif.
Définir le chemin d'accès au fichier Excel
À l'aide de System.IO.FileInfo, Tim définit un chemin d'accès à un fichier codé en dur :
var file = new FileInfo(@"C:\demos\youtubedemo.xlsx");
var file = new FileInfo(@"C:\demos\youtubedemo.xlsx");
Ce fichier n'existe pas au départ : il sera créé dynamiquement par le programme.
Création d'un modèle de données
Pour remplir la feuille de calcul Excel, Tim définit une simple classe PersonModel avec les propriétés suivantes :
-
entier Id
-
chaîne Prénom
- chaîne Nom
Il utilise une méthode d'aide GetSetupData() pour renvoyer une List
Enregistrement de données dans un fichier Excel de manière asynchrone
Dans le développement moderne, il est inacceptable de bloquer le fil de l'interface utilisateur. C'est pourquoi Tim définit une méthode asynchrone :
static async Task SaveExcelFile(List<PersonModel> people, FileInfo file)
static async Task SaveExcelFile(List<PersonModel> people, FileInfo file)
Avant d'écrire dans Excel, il vérifie si le fichier existe et le supprime pour éviter les conflits de noms.
if (file.Exists) file.Delete();
if (file.Exists) file.Delete();
Création et formatage de la feuille de calcul Excel
Tim utilise l'objet EPPlus ExcelPackage à l'intérieur d'un bloc using pour garantir une élimination correcte :
using var package = new ExcelPackage(file);
using var package = new ExcelPackage(file);
Il ajoute une nouvelle feuille de travail au classeur :
var ws = package.Workbook.Worksheets.Add("MainReport");
var ws = package.Workbook.Worksheets.Add("MainReport");
Charge de données
À l'aide de LoadFromCollection, il insère la liste des personnes à partir de la cellule "A2" :
ws.Cells["A2"].LoadFromCollection(people, true);
ws.Cells["A2"].LoadFromCollection(people, true);
- la traduction doit rester professionnelle, en préservant l'exactitude technique tout en expliquant les caractéristiques et les avantages de ces outils de développement.
Ensuite, AutoFitColumns() ajuste automatiquement la largeur des colonnes :
ws.Cells[ws.Dimension.Address].AutoFitColumns();
ws.Cells[ws.Dimension.Address].AutoFitColumns();
Enfin, il enregistre le fichier Excel :
await package.SaveAsync();
await package.SaveAsync();
Styler les cellules et les lignes d'Excel
Pour rendre le fichier Excel plus lisible, Tim montre comment appliquer des styles :
Rangée de titre
ws.Cells["A1"].Value = "Our Cool Report";
ws.Cells["A1:C1"].Merge = true; ws.Row(1).Style.Font.Size = 24;
ws.Row(1).Style.Font.Color.SetColor(Color.Blue);
ws.Column(1).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
ws.Cells["A1"].Value = "Our Cool Report";
ws.Cells["A1:C1"].Merge = true; ws.Row(1).Style.Font.Size = 24;
ws.Row(1).Style.Font.Color.SetColor(Color.Blue);
ws.Column(1).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
Rangée d'en-tête
ws.Row(2).Style.Font.Bold = true;
ws.Row(2).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
ws.Row(2).Style.Font.Bold = true;
ws.Row(2).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
Largeur de colonne personnalisée
ws.Column(3).Width = 20;
ws.Column(3).Width = 20;
Cette section démontre un formatage avancé tel que :
-
Cellules fusionnées
-
Style de police
-
Couleurs de fond
-
Alignement des lignes et des colonnes
- Ajustements de la largeur
Ces derniers imitent les fonctions de formatage typiques de MS Office Excel.
Lecture de données à partir d'un fichier Excel en C
Maintenant que nous avons écrit des données dans Excel, il est temps de les relire dans C#.
Tim présente la méthode :
static async Task<List<PersonModel>> LoadExcelFile(FileInfo file)
static async Task<List<PersonModel>> LoadExcelFile(FileInfo file)
Il met en place des compteurs de lignes et de colonnes :
int row = 3; // Skip title and header rows int col = 1;
int row = 3; // Skip title and header rows int col = 1;
Faire des boucles dans les lignes
À l'aide d'une boucle while, il vérifie que les cellules ne sont pas vides et lit les valeurs :
while (!string.IsNullOrWhiteSpace(ws.Cells[row, col].Value?.ToString()))
while (!string.IsNullOrWhiteSpace(ws.Cells[row, col].Value?.ToString()))
À l'intérieur de la boucle, les valeurs sont lues et analysées :
p.Id = int.Parse(ws.Cells[row, col].Value.ToString());
p.FirstName = ws.Cells[row, col + 1].Value.ToString();
p.LastName = ws.Cells[row, col + 2].Value.ToString();
p.Id = int.Parse(ws.Cells[row, col].Value.ToString());
p.FirstName = ws.Cells[row, col + 1].Value.ToString();
p.LastName = ws.Cells[row, col + 2].Value.ToString();
La liste
Vérification des données importées
Tim parcourt en boucle la liste retournée et écrit chaque entrée dans la console :
foreach (var p in peopleFromExcel)
{
Console.WriteLine($"{p.Id} {p.FirstName} {p.LastName}");
}
foreach (var p in peopleFromExcel)
{
Console.WriteLine($"{p.Id} {p.FirstName} {p.LastName}");
}
Pour démontrer la flexibilité d'Excel en tant qu'outil d'entrée utilisateur, Tim ajoute manuellement de nouveaux enregistrements ("Bill Smith", "Mary White") directement dans le fichier Excel. Lors de la ré-exécution de l'application, ces entrées sont importées sans modification du code, ce qui prouve le potentiel d'Excel en tant qu'interface de saisie de données.
Cas d'utilisation pratiques
Tim met en avant des cas d'utilisation de la solution C# Excel :
-
Exportation de tableaux de base de données vers Excel
-
Importation de données saisies par les utilisateurs finaux
-
Utiliser Excel comme tableau de bord de reporting
- Création de classeurs structurés pour le traitement des données
Et tout cela sans s'appuyer sur Microsoft.Office.Interop.Excel, qui nécessite l'installation d'Excel.
Notes finales sur EPPlus et les fichiers Excel
Tim explique que les fichiers .xlsx créés par programme ne contiennent pas toutes les métadonnées tant qu'ils ne sont pas ouverts et enregistrés dans Excel. C'est pourquoi la taille du fichier augmente après son ouverture dans l'application Excel réelle.
Il note également qu'EPPlus est une bibliothèque sophistiquée et robuste qui prend en charge :
-
Graphiques
-
Images
-
Graphiques à étincelles
-
Formules
-
Mise en page
-
Frontières
- Formatage des cellules
Conclusion
La création de fichiers Excel en C# ne doit pas nécessairement être difficile ou coûteuse. Grâce à la bibliothèque EPPlus Excel, les développeurs peuvent créer des documents Excel riches en fonctionnalités de manière programmatique sans avoir besoin de MS Office. Comme le démontre Tim Corey, quelques lignes de code suffisent pour.. :
-
Créer un fichier Excel
-
Remplir les lignes et les colonnes
-
Appliquer le style
-
Lire les données en arrière
- Utiliser Excel comme interface utilisateur
Il s'agit donc d'un choix fantastique pour les outils de reporting légers, l'importation et l'exportation de données, ou simplement pour fournir à vos utilisateurs une interface qu'ils connaissent déjà.
Ainsi, la prochaine fois que vous construirez un projet et que vous aurez besoin de sortir ou de consommer des données Excel, essayez de mettre en œuvre l'exemple de code de Tim Corey vidéo-et apportez la puissance d'Excel dans vos applications .NET Framework ou .NET Core.
