IRONSOFTWAREHOME
UTILISATION D'IRONXL

Comment créer un tableau croisé dynamique Excel en C#

Curtis Chau
Curtis Chau
Updated: 21 avril 2026

Travailler avec un tableau croisé dynamique Excel de manière programmatique est une exigence courante dans les applications commerciales qui doivent analyser et calculer des données sources. Bien que l'Interop d'Excel de Microsoft ait été la méthode traditionnelle pour créer un tableau croisé dynamique dans un fichier Excel, des solutions modernes comme IronXL offrent des avantages significatifs. Ce guide détaille les deux méthodes avec des exemples pratiques pour vous aider à créer un tableau croisé dynamique dans Excel en utilisant C# Interop ou à choisir une meilleure alternative.

Comprendre les deux approches

Qu'est-ce que l'Interop Excel ?

Excel Interop utilise COM (Component Object Model) pour contrôler Microsoft Excel directement via C#. Il nécessite qu'Office soit installé sur le système et automatise essentiellement Excel comme si un utilisateur interagissait avec l'application. Chaque feuille de calcul, classeur et cellule devient un objet que vous pouvez manipuler via du code.

Qu'est-ce qu'IronXL ?

IronXL est une bibliothèque autonome .NET qui peut lire, éditer et créer des fichiers Excel sans nécessiter Microsoft Office. Il fonctionne sur Windows, Linux, macOS et les conteneurs Docker, ce qui le rend idéal pour les scénarios de déploiement modernes. Vous pouvez ouvrir, enregistrer et exporter des données sans le surcoût de l'interop COM.

Configuration de votre environnement

Pour Excel Interop

PM > Install-Package Microsoft.Office.Interop.Excel

Pour IronXL

PM > Install-Package IronXL.Excel

Alternativement, utilisez l'UI du Package Manager NuGet en recherchant "IronXL.Excel" et en cliquant sur installer. Vous pouvez également installer via le CLI .NET avec les arguments de commande ou le référencer directement depuis GitHub.

Les deux bibliothèques sont disponibles via NuGet. Notez qu'Interop Excel nécessite une installation complète de Microsoft Office, tandis qu'IronXL fonctionne de manière indépendante. Avant de procéder, assurez-vous que votre système répond aux exigences.

Création d'un tableau croisé dynamique Excel par programmation avec C# Interop

Voici un exemple complet montrant comment créer un tableau croisé dynamique de manière programmatique en utilisant la méthode traditionnelle Interop :

using Excel = Microsoft.Office.Interop.Excel;
class Program
{
    static void Main(string[] args)
    {
        // Create Excel application instance
        var excelApp = new Excel.Application();
        var workbook = excelApp.Workbooks.Add();
                    var dataSheet = (Excel.Worksheet)workbook.Worksheets[1];
            var pivotSheet = (Excel.Worksheet)workbook.Worksheets.Add();
            // Add header row and sample data
            dataSheet.Cells[1, 1] = "Product";
            dataSheet.Cells[1, 2] = "Region";
            dataSheet.Cells[1, 3] = "Sales";
            // ... populate data rows with values
            // Add sample data rows
            dataSheet.Cells[2, 1] = "Laptop";
            dataSheet.Cells[2, 2] = "North";
            dataSheet.Cells[2, 3] = 1200;
            dataSheet.Cells[3, 1] = "Laptop";
            dataSheet.Cells[3, 2] = "South";
            dataSheet.Cells[3, 3] = 1500;
            dataSheet.Cells[4, 1] = "Phone";
            dataSheet.Cells[4, 2] = "North";
            dataSheet.Cells[4, 3] = 800;
            dataSheet.Cells[5, 1] = "Phone";
            dataSheet.Cells[5, 2] = "South";
            dataSheet.Cells[5, 3] = 950;
            dataSheet.Cells[6, 1] = "Tablet";
            dataSheet.Cells[6, 2] = "East";
            dataSheet.Cells[6, 3] = 600;
            dataSheet.Cells[7, 1] = "Tablet";
            dataSheet.Cells[7, 2] = "West";
            dataSheet.Cells[7, 3] = 750;
            dataSheet.Cells[8, 1] = "Monitor";
            dataSheet.Cells[8, 2] = "North";
            dataSheet.Cells[8, 3] = 400;
            dataSheet.Cells[9, 1] = "Monitor";
            dataSheet.Cells[9, 2] = "South";
            dataSheet.Cells[9, 3] = 500;
            dataSheet.Cells[10, 1] = "Keyboard";
            dataSheet.Cells[10, 2] = "East";
            dataSheet.Cells[10, 3] = 300;
            // Create pivot cache from source data range
            Excel.Range dataRange = dataSheet.Range["A1:C10"];
            Excel.PivotCache pivotCache = workbook.PivotCaches().Create(
                Excel.XlPivotTableSourceType.xlDatabase, dataRange);
            // Create PivotTable at specific location
            Excel.PivotTables pivotTables = (Excel.PivotTables)pivotSheet.PivotTables();
            Excel.PivotTable pivotTable = pivotTables.Add(
                pivotCache, pivotSheet.Range["A3"], "SalesPivot");
            // Configure pivot table fields - row and column headers
            ((Excel.PivotField)pivotTable.PivotFields("Product")).Orientation =
                Excel.XlPivotFieldOrientation.xlRowField;
            ((Excel.PivotField)pivotTable.PivotFields("Region")).Orientation =
                Excel.XlPivotFieldOrientation.xlColumnField;
            ((Excel.PivotField)pivotTable.PivotFields("Sales")).Orientation =
                Excel.XlPivotFieldOrientation.xlDataField;
            // Configure grand totals and formatting
            pivotTable.RowGrand = true;
            pivotTable.ColumnGrand = true;
            // Save the Excel file
            workbook.SaveAs("pivot_interop.xlsx");
            workbook.Close();
            excelApp.Quit();
            // Critical: Release COM objects to avoid errors
            #if WINDOWS
            Marshal.ReleaseComObject(pivotTable);
            Marshal.ReleaseComObject(pivotSheet);
            Marshal.ReleaseComObject(dataSheet);
            Marshal.ReleaseComObject(workbook);
            Marshal.ReleaseComObject(excelApp);
            #endif
    }
}

Ce code crée une application Excel, ajoute une feuille de calcul avec des données sources incluant une ligne d'en-tête, établit un cache des données de tableau croisé, construit l'objet PivotTable et configure l'orientation du champ. La section de nettoyage est cruciale - ne pas libérer les objets COM provoque des fuites de mémoire. Chaque cellule, plage et feuille de calcul doit être correctement éliminée pour éviter les erreurs d'exécution.

L'approche alternative IronXL

IronXL adopte une approche différente en travaillant directement avec le format de fichier Excel. Voici comment obtenir des résultats d'analyse similaires de manière programmatique :

using IronXL;
using System.Linq;
class Program 
{
    static void Main(string[] args)
    {
        // Create workbook and add worksheet with data
        WorkBook workbook = WorkBook.Create();
        WorkSheet sheet = workbook.CreateWorkSheet("Data");
        // Add header row to define column structure
        sheet["A1"].Value = "Product";
        sheet["B1"].Value = "Region";
        sheet["C1"].Value = "Sales";
        // Add sample data to cells
        sheet["A2"].Value = "Widget";
        sheet["B2"].Value = "North";
        sheet["C2"].Value = 1500;
        // ... continue to add more data rows
        sheet["A3"].Value = "Laptop";
        sheet["B3"].Value = "South";
        sheet["C3"].Value = 1500;
        sheet["A4"].Value = "Phone";
        sheet["B4"].Value = "North";
        sheet["C4"].Value = 800;
        sheet["A5"].Value = "Phone";
        sheet["B5"].Value = "South";
        sheet["C5"].Value = 950;
        sheet["A6"].Value = "Tablet";
        sheet["B6"].Value = "East";
        sheet["C6"].Value = 600;
        sheet["A7"].Value = "Tablet";
        sheet["B7"].Value = "West";
        sheet["C7"].Value = 750;
        sheet["A8"].Value = "Monitor";
        sheet["B8"].Value = "North";
        sheet["C8"].Value = 400;
        sheet["A9"].Value = "Monitor";
        sheet["B9"].Value = "South";
        sheet["C9"].Value = 500;
        sheet["A10"].Value = "Keyboard";
        sheet["B10"].Value = "East";
        sheet["C10"].Value = 300;
        // Create summary analysis worksheet
        var summarySheet = workbook.CreateWorkSheet("Summary");
        // Group and calculate aggregated data
        var data = sheet["A1:C10"].ToDataTable(true);
        var productSummary = data.AsEnumerable()
            .GroupBy(row => row.Field<string>("Product"))
            .Select((group, index) => new {
                Product = group.Key,
                TotalSales = group.Sum(r => Convert.ToDecimal(r["Sales"])),
                Count = group.Count(),
                RowIndex = index + 2
            });
        // Write column headers for summary
        summarySheet["A1"].Value = "Product Summary";
        summarySheet["A2"].Value = "Product";
        summarySheet["B2"].Value = "Total Sales";
        summarySheet["C2"].Value = "Count";
        // Export results to cells
        foreach (var item in productSummary)
        {
            summarySheet[$"A{item.RowIndex + 1}"].Value = item.Product;
            summarySheet[$"B{item.RowIndex + 1}"].Value = item.TotalSales;
            summarySheet[$"C{item.RowIndex + 1}"].Value = item.Count;
        }
        // Apply number formatting and style
        summarySheet["B:B"].FormatString = "$#,##0.00";
        // Save the xlsx file
        workbook.SaveAs("analysis_ironxl.xlsx");
    }
}

Cet exemple IronXL montre comment créer un classeur, ajouter des feuilles de calcul, remplir les cellules avec des données et effectuer une analyse d'agrégation. Le code regroupe les données par produit et calcule les totaux et les comptes, créant un rapport sommaire. Aucun objet COM n'a besoin d'être géré, et les méthodes sont des collections .NET simples qui gèrent automatiquement la mémoire.

Sortie

Comment créer un tableau croisé dynamique Excel en C# : Figure 6 - Sortie IronXL

Comment créer un tableau croisé dynamique Excel en C# : Figure 7 - Sortie récapitulative

Principales différences et considérations

Exigences de déploiement

Excel Interop nécessite :

  • Une installation de Microsoft Excel avec une licence valide

  • Système d'exploitation Windows

  • Permissions et paramètres COM appropriés

  • Configuration du serveur pour l'automatisation Office IronXL nécessite :

  • Uniquement le paquet de bibliothèque IronXL

  • Fonctionne sur toute plateforme supportant .NET

  • Aucune installation ou licence Office nécessaire

  • Processus de déploiement simplifié

Comment créer un tableau croisé dynamique Excel en C# : Figure 8 - Fonctionnalités

Qualité du code et maintenance

Interop implique de gérer les objets COM avec soin pour éviter les fuites de mémoire et les erreurs. Chaque objet Excel créé doit être explicitement libéré en utilisant les bonnes méthodes. IronXL utilise des objets standard .NET avec une collecte automatique des déchets, réduisant le risque de problèmes de ressources.

Gestion des erreurs

Avec Interop, les erreurs se rapportent souvent à la disponibilité d'Excel, aux différences de versions ou aux échecs COM. Les erreurs IronXL sont des exceptions .NET standard, ce qui rend le débogage plus simple. Vous pouvez compter sur des modèles try-catch familiers sans vous soucier des problèmes spécifiques à COM.

Meilleures pratiques et recommandations

Choisissez Excel Interop lorsque :

  • Vous avez besoin des fonctionnalités exactes de tableau croisé dynamique Excel avec toutes les options de formatage

  • Excel est garanti d'être disponible sur le système

  • Travailler uniquement sur des applications de bureau Windows

  • Exigences de code hérité Choisissez IronXL lorsque :

  • Construire des applications serveur ou des solutions web

  • Besoin de compatibilité multiplateforme

  • Besoin de performances fiables sans surcharge COM

  • Déployer dans des conteneurs ou des environnements cloud

Visitez la documentation IronXL pour en savoir plus sur l'implémentation. Pour toute question ou support, contactez l'équipe d'Iron Software.

Conclusion

Alors que C# Interop fournit un accès direct pour créer des fonctionnalités de tableau croisé dynamique dans Excel, cela comporte des limitations et de la complexité au niveau de déploiement. IronXL offre une alternative moderne qui simplifie la manipulation de fichiers Excel tout en offrant la flexibilité de fonctionner partout où .NET est pris en charge.

Pour les développeurs construisant de nouvelles applications ou modernisant des solutions existantes, l'approche IronXL élimine la surcharge de COM Interop tout en fournissant de puissantes capacités de manipulation de données. Que vous ayez besoin de lire, d'éditer ou d'exporter des données Excel, IronXL offre une solution plus propre.

Commencez avec l'essai gratuit d'IronXL pour faire l'expérience de la différence, ou explorez des tutoriels pour voir plus d'exemples. Prêt à déployer ? Consultez les options de licence pour choisir le bon package pour votre tâche.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes et créer des manuels bien structurés et visuellement attrayants.

...
Lire la suite

Articles connexes

Key in blue circle

Obtenez votre clé d'essai de 30 jours instantanément.

Your trial license will be sent to your email address

Aucune restriction. 100 % débloqué. Pas de carte bancaire.

bullet_checkedAucune carte de crédit ou création de compte requiseAucune restriction. 100 % débloqué. Pas de carte bancaire.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Réservez votre Démonstration en direct gratuite
Booking Badge

De confiance par des millions d'ingénieurs dans le monde entier

Logos des clients d'Iron Software
Obtenez Votre Consultation sans Engagement
Remplissez le formulaire ci-dessous ou envoyez un email à sales@ironsoftware.com
Vos informations seront toujours gardées confidentielles.
De confiance par des millions d'ingénieurs dans le monde entier
Logos des clients d'Iron Software
Obtenez votre clé d'essai 30 jours gratuitement.
Aucune carte de crédit ou création de compte requise