Je vais vous montrer ici deux exemples de création de fichier Excel. La première méthode permet de créer un fichier Excel (.XLSX) natif et la seconde s’appuie sur un fichier excel existant et d’y placer vos données. Je vais utiliser une application Blazor Webassembly mais le principe est identique sur Blazor Server
Methode 1 : Création d’un fichier au format XLS
Pour ces deux méthodes, je vais utiliser un paquet Nuget ClosedXML qui est en licence MIT. Donc vous pouvez l’utiliser librement même si votre application est commerciale.
Le principe est assez simple si on souhaite créer un fichier excel basique : Vous créez le fichier excel « XLWorkbook » dans lequel vous ajouterez un (ou plusieurs 🙂 ) onglet « Worksheets » et vous vous déplacerez de cellule en cellule « Cell » pour y placer vos données et à la fin vous enregistrez votre fichier par la fonction « SaveAs« . Simple non ?
var wb = new XLWorkbook();
wb.Properties.Author = "the Author";
wb.Properties.Title = "the Title";
wb.Properties.Subject = "the Subject";
var ws = wb.Worksheets.Add("Weather Forecast");
ws.Cell(1, 1).Value = "Temp. (C)";
ws.Cell(1, 2).Value = "Temp. (F)";
ws.Cell(1, 3).Value = "Summary";
for (int row = 0; row < data.Length; row++)
{
ws.Cell(row + 1, 1).Value = data[row].TemperatureC;
ws.Cell(row + 1, 2).Value = data[row].TemperatureF;
ws.Cell(row + 1, 3).Value = data[row].Summary;
}
MemoryStream XLSStream = new();
wb.SaveAs(XLSStream);
Notez qu’ici j’enregistre mon tableur Excel dans un Stream mais on peut directement écrire le chemin et le nom du fichier. Etant sur une application web, je vais ensuite utiliser une fonction javacript pour proposer à mon utilisateur de télécharger son rapport.
Vous retrouverez le code dans mon repository GitHub que j’ai simplifié afin que vous compreniez rapidement le principe.
Méthode 2 – Utiliser un fichier excel existant
Pour cette méthode, on va utiliser le paquet Nuget ClosedXML.Report. Vous retrouverez très facilement ces paquets dans l’explorateur de paquets Nuguets de Visual Studio.
En utilisant un fichier Excel comme Template, on va pouvoir rapidement faire une jolie présentation. Tout dépends alors de ce que vous souhaitez. Sincèrement si c’est juste un export de données pour des utilisateurs « non geek » , la première méthode rempli bien le rôle. Alors oui, vous pourriez proposer d’exporter dans des formats bruts du type JSON, CSV etc… mais selon le public utilisant votre application, c’est pas chouette.
Côté code, c’est beaucoup plus simple :
var template = new XLTemplate(streamTemplate);
template.AddVariable("WeatherForecasts", data);
template.Generate();
MemoryStream XLSStream = new();
emplate.SaveAs(XLSStream);
Voilà. On met en paramètre à XLTemplate le fichier XLS initial ou comme ici le flux Stream de mon fichier. Puis on lui passe via « AddVariable » une List, Array IEnumerable.. en indiquant le nom du groupe de cellules ! C’est là où j’ai rencontré des difficultés pour maîtriser la bête. Mais une fois trouvé, c’est comme tout ; c’est facile 🙂
Et vous retrouvez ici le nom que j’ai donnée à ma liste : « WeatherForecasts« . Notez que dans les « double accolades vous avez item suivi du nom de mes propriétés. item est imposé par la librarie. Il y en a 3 :
- item – élément de la liste.
- index – index d’un élément
- items – tout l’ensemble ex: TOTAL DE RECORDS : {{items.Count()}}
Nommer un groupe ne sert que pour les listes sinon il suffit de placer dans une cellule un nom comme {{name}} et dans votre code C# d’ajouter :
Il y a une documentation assez importante sur ces librairies : https://closedxml.github.io/ClosedXML.Report/docs/en/index
Retrouvez ici mon exemple sur Github : https://github.com/tossnet/Blazor-Excel-export
N’hésitez pas à mettre un pousse bleu, cliquer sur la cloche pour être averti des prochaines vidéos de la chaine et de laisser un commentaire … ah non mince, on n’est pas sur youtube ici 😀
Et en C# sous asp.net tu aurais un exemple ?
Coucou Stephane. Suis loin d’être spécialise ASP.NET mais dans cet export il n’y a rien de spécifique à Blazor mise à part l’appel au JS pour proposer au user le download du fichier généré. Regarde aussi le Nugets utilisé, il a plusieurs packages dédié MVC/ASP : https://github.com/ClosedXML