Derniers tips / Mémos
Modélise nativement « exactement l'un de ces types », avec un switch exhaustif vérifié par le compilateur.
Fin des state machines générées par le compilateur : moins d'allocations et des stack traces enfin lisibles.
Recherche sémantique directement dans SQL Server 2025, sans base vectorielle séparée, en LINQ typé.
Framework UI cross-platform pour .NET : Windows, macOS, Linux, iOS, Android et WebAssembly.
Découvrez les nouvelles APIs asynchrones pour la compression ZIP et les améliorations de performance dans .NET 10
ClosedXML - Manipulation de fichiers Excel en .NET
ClosedXML est une bibliothèque .NET puissante qui permet de créer, lire et manipuler des fichiers Excel (.xlsx, .xlsm) sans nécessiter l'installation de Microsoft Excel. Elle offre une API intuitive basée sur OpenXML, idéale pour générer des rapports Excel côté serveur ou traiter des données en masse.
Installation
Installez le package NuGet ClosedXML dans votre projet :
dotnet add package ClosedXMLCréation de tableau
Voici comment créer un fichier Excel à partir d'une liste d'objets. On définit d'abord un modèle Product et des données d'exemple :
// Define Product model
public class Product
{
public string Name { get; set; }
public decimal Price { get; set; }
public int Quantity { get; set; }
}
// Create sample data
var products = new List<Product>
{
new Product { Name = "Laptop", Price = 1200.00m, Quantity = 5 },
new Product { Name = "Mouse", Price = 25.50m, Quantity = 50 },
new Product { Name = "Keyboard", Price = 75.00m, Quantity = 30 }
};using ClosedXML.Excel;
using (var workbook = new XLWorkbook())
{
var worksheet = workbook.Worksheets.Add("Products");
// Add headers
worksheet.Cell("A1").Value = "Name";
worksheet.Cell("B1").Value = "Price";
worksheet.Cell("C1").Value = "Quantity";
// Add product data
int row = 2;
foreach (var product in products)
{
worksheet.Cell($"A{row}").Value = product.Name;
worksheet.Cell($"B{row}").Value = product.Price;
worksheet.Cell($"C{row}").Value = product.Quantity;
row++;
}
// Auto-fit columns
worksheet.Columns("A", "C").AdjustToContents();
workbook.SaveAs("Products.xlsx");
}Ajouter du style
Vous pouvez améliorer la présentation du fichier en ajoutant une mise en forme à l'en-tête (couleur de fond, texte gras) :
using ClosedXML.Excel;
using (var workbook = new XLWorkbook())
{
var worksheet = workbook.Worksheets.Add("Products");
// Add headers with styling
var headerRow = worksheet.Row(1);
headerRow.Cell("A1").Value = "Name";
headerRow.Cell("B1").Value = "Price";
headerRow.Cell("C1").Value = "Quantity";
// Apply header style
headerRow.Cells("A1:C1").Style.Font.Bold = true;
headerRow.Cells("A1:C1").Style.Fill.BackgroundColor = XLColor.LightBlue;
// Add product data
int row = 2;
foreach (var product in products)
{
worksheet.Cell($"A{row}").Value = product.Name;
worksheet.Cell($"B{row}").Value = product.Price;
worksheet.Cell($"C{row}").Value = product.Quantity;
row++;
}
worksheet.Columns("A", "C").AdjustToContents();
workbook.SaveAs("Products.xlsx");
}À partir d'un template
Vous pouvez également charger un template existant (Template.xlsx) et y injecter les données. Les colonnes du template correspondent au nom des champs du modèle :
using ClosedXML.Excel;
using (var workbook = new XLWorkbook("Template.xlsx"))
{
var worksheet = workbook.Worksheet(1);
// Assuming template has headers: Name, Price, Quantity
// Fill data starting from row 2
int row = 2;
foreach (var product in products)
{
worksheet.Cell($"A{row}").Value = product.Name;
worksheet.Cell($"B{row}").Value = product.Price;
worksheet.Cell($"C{row}").Value = product.Quantity;
row++;
}
// Save with new filename or overwrite
workbook.SaveAs("Products.xlsx");
}Avantages
- Pas besoin d'installer Microsoft Excel sur le serveur
- API intuitive et facile à utiliser
- Bonnes performances même avec de gros fichiers
- Fonctionne sur Windows, Linux et macOS
- Open source avec une communauté active