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 ClosedXML

Cré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