Comment créer un fichier Excel en C#

How to Create an Excel File in C# (.NET Tutorial)

This article was translated from English: Does it need improvement?
Translated
View the article in English

La plupart des équipes avec lesquelles je travaille ont besoin de générer des fichiers Excel aussi souvent, sinon plus souvent, qu'elles ne les lisent : factures, exportations, rapports mensuels que l'équipe financière peut ouvrir et filtrer. J'ai construit ce flux des dizaines de fois à travers des applications console, des services ASP.NET et des travailleurs d'arrière-plan. L'API d'IronXL est suffisamment proche de la manière dont Excel lui-même réfléchit que le code se lit presque comme une spécification, mais il y a quelques décisions de formatage et de sauvegarde qui comptent plus que ce que la surface de l'API laisse paraître. Ce guide explique comment je génère réellement des fichiers XLSX en production, y compris les pièges qui m'ont coûté du temps lors des premiers essais.

La bibliothèque fonctionne sur .NET 8, .NET 9, .NET Core et .NET Framework, sur Windows, Linux, macOS, Azure et AWS, sans Microsoft Office sur l'hôte. Les chemins de code ci-dessous sont les mêmes pour toutes ces cibles.

Démarrage rapide : Créer un fichier Excel

Trois lignes mettent en place un nouveau classeur, écrivent une valeur dans A1 et enregistrent le fichier sur disque. Aucun processus Excel impliqué, pas de marshaling COM.

  1. Installez IronXL avec le Gestionnaire de Packages NuGet

    PM > Install-Package IronXL.Excel
  2. Copiez et exécutez cet extrait de code.

    WorkBook book = IronXL.WorkBook.Create(IronXL.ExcelFileFormat.XLSX); book.CreateWorkSheet("Sheet1")["A1"].Value = "Hello World"; book.SaveAs("MyFile.xlsx");
  3. Déployez pour tester sur votre environnement de production.

    Commencez à utiliser IronXL dans votre projet dès aujourd'hui avec un essai gratuit

    arrow pointer

Qu'est-ce qu'IronXL et pourquoi l'utiliser pour la création de fichiers Excel ?

IronXL est une API Excel en C# et VB.NET pour lire, éditer et créer des fichiers tableurs. Il ne nécessite pas Microsoft Office ou Excel Interop, ce qui maintient le déploiement à une référence NuGet et une directive using.

IronXL prend entièrement en charge les environnements .NET 9, .NET 8, .NET Core, .NET Framework, Xamarin, Mobile, Linux, macOS et Azure.

Caractéristiques d'IronXL

  • Assistance humaine directe de notre équipe de développement .NET
  • Installation rapide avec Microsoft Visual Studio
  • GRATUIT pour le développement. Licences de $999

Comment créer et enregistrer rapidement un fichier Excel ?

Installez IronXL via NuGet ou téléchargez directement la DLL . La classe WorkBook est le point d'entrée pour toutes les opérations Excel, et la classe WorkSheet expose des méthodes pour manipuler des feuilles individuelles. Le guide complet pas à pas commence à l'étape 1 ci-dessous.


How Do I Install the IronXL C# Library?

Installez IronXL via le gestionnaire de packages NuGet dans Visual Studio ou utilisez la console du gestionnaire de packages :

Install-Package IronXL.Excel

Accédez au Gestionnaire de packages NuGet via le menu Projet ou en cliquant avec le bouton droit sur votre projet dans l'Explorateur de solutions.

Menu de projet Visual Studio affichant l'option Gérer les packages NuGet Figure 3 - Accéder au gestionnaire de packages NuGet via le menu Projet

Menu contextuel de l'Explorateur de solutions affichant l'option Gérer les packages NuGet Figure 4 - Menu contextuel clic droit dans l'explorateur de solutions

Recherchez IronXL.Excel dans la liste des packages et cliquez sur Installer.


Gestionnaire de packages NuGet montrant le package IronXL.Excel prêt à être installé Figure 5 - Installation d'IronXL.Excel via le gestionnaire de packages NuGet

Alternativement, téléchargez directement le DLL IronXL et ajoutez-le comme référence à votre projet via Explorateur de solutions > Références > Parcourir IronXL.dll.

Page de téléchargement du site web IronXL montrant les instructions d'installation et le bouton de téléchargement Figure 6 - Téléchargez la bibliothèque IronXL depuis le site officiel

Veuillez noterIronXL ne nécessite aucune installation de Microsoft Office ou Excel Interop. Il fonctionne sur toute plateforme supportée par .NET, y compris Windows, Linux, macOS, et les environnements cloud.)}


Comment configurer mon projet .NET ?

IronXL fonctionne avec tout type de projet .NET : applications console, applications web ASP.NET, APIs ou outils de bureau. L'exemple ci-dessous utilise une application Web ASP.NET, mais les mêmes chemins de code fonctionnent à travers tous les modèles de projet.

Suivez ces étapes pour créer un site web ASP.NET :

  1. Ouvrir Visual Studio
  2. Cliquez sur Fichier &gt ; Nouveau projet
  3. Sélectionnez Web sous Visual C# dans la liste Type de projet
  4. Sélectionnez une application Web ASP.NET


    Boîte de dialogue Nouveau projet de Visual Studio avec l'option Application Web ASP.NET sélectionnée

    Figure 1Create new ASP.NET project

  5. Cliquez sur OK
  6. Sélectionner le modèle de Formulaires Web

    Sélection du modèle de projet ASP.NET affichant l'option Web Forms

    Figure 2Select Web Forms template

  7. Cliquez sur OK

Une fois votre projet prêt, installez IronXL pour commencer à créer des fichiers Excel par programmation.


How Do I Create an Excel Workbook in C#?

Un nouveau classeur est un simple appel à WorkBook.Create, avec le format de fichier passé en tant qu'énumération :

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-3.cs
WorkSheet workSheet = workBook.CreateWorkSheet("2020 Budget");
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("2020 Budget")
$vbLabelText   $csharpLabel

La méthode Create prend en charge les formats XLS (Excel 97-2003) et XLSX (Excel 2007+). XLSX est recommandé pour de meilleures performances et des fichiers plus petits.

  • XLSX : Recommandé pour toutes les versions modernes d'Excel (2007 et suivantes) — fichiers plus petits, meilleures performances
  • XLS : Format hérité pour la compatibilité avec Excel 97–2003

Comment ajouter une feuille de travail à mon classeur ?

Ajoutez des feuilles de calcul via CreateWorkSheet :

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-4.cs
workSheet["A1"].Value = "January";
workSheet["B1"].Value = "February";
workSheet["C1"].Value = "March";
workSheet["D1"].Value = "April";
workSheet["E1"].Value = "May";
workSheet["F1"].Value = "June";
workSheet["G1"].Value = "July";
workSheet["H1"].Value = "August";
workSheet["I1"].Value = "September";
workSheet["J1"].Value = "October";
workSheet["K1"].Value = "November";
workSheet["L1"].Value = "December";
workSheet("A1").Value = "January"
workSheet("B1").Value = "February"
workSheet("C1").Value = "March"
workSheet("D1").Value = "April"
workSheet("E1").Value = "May"
workSheet("F1").Value = "June"
workSheet("G1").Value = "July"
workSheet("H1").Value = "August"
workSheet("I1").Value = "September"
workSheet("J1").Value = "October"
workSheet("K1").Value = "November"
workSheet("L1").Value = "December"
$vbLabelText   $csharpLabel

Un cahier d'exercices contient une ou plusieurs feuilles de travail. Chaque feuille de calcul est composée de lignes et de colonnes, avec des cellules à leurs intersections. Utilisez la méthode CreateWorkSheet pour ajouter de nouvelles feuilles à votre classeur.

  • WorkBook.CreateWorkSheet(String) : Ajoute une nouvelle feuille avec le nom de l'onglet donné
  • WorkSheet : Récupère une feuille existante par son nom
  • Les noms des feuilles doivent être uniques au sein d'un classeur.

Comment définir les valeurs des cellules dans Excel ?

Comment puis-je définir manuellement les valeurs des cellules ?

L'accès aux cellules utilise les mêmes chaînes d'adresses de style A1 que vous voyez dans Excel :

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-5.cs
Random r = new Random();
for (int i = 2 ; i <= 11 ; i++)
{
    workSheet["A" + i].Value = r.Next(1, 1000);
    workSheet["B" + i].Value = r.Next(1000, 2000);
    workSheet["C" + i].Value = r.Next(2000, 3000);
    workSheet["D" + i].Value = r.Next(3000, 4000);
    workSheet["E" + i].Value = r.Next(4000, 5000);
    workSheet["F" + i].Value = r.Next(5000, 6000);
    workSheet["G" + i].Value = r.Next(6000, 7000);
    workSheet["H" + i].Value = r.Next(7000, 8000);
    workSheet["I" + i].Value = r.Next(8000, 9000);
    workSheet["J" + i].Value = r.Next(9000, 10000);
    workSheet["K" + i].Value = r.Next(10000, 11000);
    workSheet["L" + i].Value = r.Next(11000, 12000);
}
Dim r As New Random()
For i As Integer = 2 To 11
	workSheet("A" & i).Value = r.Next(1, 1000)
	workSheet("B" & i).Value = r.Next(1000, 2000)
	workSheet("C" & i).Value = r.Next(2000, 3000)
	workSheet("D" & i).Value = r.Next(3000, 4000)
	workSheet("E" & i).Value = r.Next(4000, 5000)
	workSheet("F" & i).Value = r.Next(5000, 6000)
	workSheet("G" & i).Value = r.Next(6000, 7000)
	workSheet("H" & i).Value = r.Next(7000, 8000)
	workSheet("I" & i).Value = r.Next(8000, 9000)
	workSheet("J" & i).Value = r.Next(9000, 10000)
	workSheet("K" & i).Value = r.Next(10000, 11000)
	workSheet("L" & i).Value = r.Next(11000, 12000)
Next i
$vbLabelText   $csharpLabel

La propriété Value accepte divers types de données, y compris les chaînes, les nombres, les dates et les booléens. IronXL formate automatiquement les cellules en fonction du type de données.

Comment puis-je définir dynamiquement les valeurs des cellules ?

Lorsque le nombre de lignes est connu au moment de l'exécution, l'interpolation de chaîne facilite la lecture du corps de la boucle :

// Initialize random number generator for sample data
Random r = new Random();

// Populate cells with random budget data for each month
for (int i = 2; i <= 11; i++)
{
    // Set different budget categories with increasing ranges
    workSheet[$"A{i}"].Value = r.Next(1, 1000);     // Office Supplies
    workSheet[$"B{i}"].Value = r.Next(1000, 2000);  // Utilities
    workSheet[$"C{i}"].Value = r.Next(2000, 3000);  // Rent
    workSheet[$"D{i}"].Value = r.Next(3000, 4000);  // Salaries
    workSheet[$"E{i}"].Value = r.Next(4000, 5000);  // Marketing
    workSheet[$"F{i}"].Value = r.Next(5000, 6000);  // IT Services
    workSheet[$"G{i}"].Value = r.Next(6000, 7000);  // Travel
    workSheet[$"H{i}"].Value = r.Next(7000, 8000);  // Training
    workSheet[$"I{i}"].Value = r.Next(8000, 9000);  // Insurance
    workSheet[$"J{i}"].Value = r.Next(9000, 10000); // Equipment
    workSheet[$"K{i}"].Value = r.Next(10000, 11000); // Research
    workSheet[$"L{i}"].Value = r.Next(11000, 12000); // Misc
}

// Alternative: Set range of cells with same value
workSheet["A13:L13"].Value = 0; // Initialize totals row
// Initialize random number generator for sample data
Random r = new Random();

// Populate cells with random budget data for each month
for (int i = 2; i <= 11; i++)
{
    // Set different budget categories with increasing ranges
    workSheet[$"A{i}"].Value = r.Next(1, 1000);     // Office Supplies
    workSheet[$"B{i}"].Value = r.Next(1000, 2000);  // Utilities
    workSheet[$"C{i}"].Value = r.Next(2000, 3000);  // Rent
    workSheet[$"D{i}"].Value = r.Next(3000, 4000);  // Salaries
    workSheet[$"E{i}"].Value = r.Next(4000, 5000);  // Marketing
    workSheet[$"F{i}"].Value = r.Next(5000, 6000);  // IT Services
    workSheet[$"G{i}"].Value = r.Next(6000, 7000);  // Travel
    workSheet[$"H{i}"].Value = r.Next(7000, 8000);  // Training
    workSheet[$"I{i}"].Value = r.Next(8000, 9000);  // Insurance
    workSheet[$"J{i}"].Value = r.Next(9000, 10000); // Equipment
    workSheet[$"K{i}"].Value = r.Next(10000, 11000); // Research
    workSheet[$"L{i}"].Value = r.Next(11000, 12000); // Misc
}

// Alternative: Set range of cells with same value
workSheet["A13:L13"].Value = 0; // Initialize totals row
' Initialize random number generator for sample data
Dim r As New Random()

' Populate cells with random budget data for each month
For i As Integer = 2 To 11
	' Set different budget categories with increasing ranges
	workSheet($"A{i}").Value = r.Next(1, 1000) ' Office Supplies
	workSheet($"B{i}").Value = r.Next(1000, 2000) ' Utilities
	workSheet($"C{i}").Value = r.Next(2000, 3000) ' Rent
	workSheet($"D{i}").Value = r.Next(3000, 4000) ' Salaries
	workSheet($"E{i}").Value = r.Next(4000, 5000) ' Marketing
	workSheet($"F{i}").Value = r.Next(5000, 6000) ' IT Services
	workSheet($"G{i}").Value = r.Next(6000, 7000) ' Travel
	workSheet($"H{i}").Value = r.Next(7000, 8000) ' Training
	workSheet($"I{i}").Value = r.Next(8000, 9000) ' Insurance
	workSheet($"J{i}").Value = r.Next(9000, 10000) ' Equipment
	workSheet($"K{i}").Value = r.Next(10000, 11000) ' Research
	workSheet($"L{i}").Value = r.Next(11000, 12000) ' Misc
Next i

' Alternative: Set range of cells with same value
workSheet("A13:L13").Value = 0 ' Initialize totals row
$vbLabelText   $csharpLabel

L'interpolation de chaîne ($"...") facilite la référence dynamique aux cellules. L'indexeur Item prend en charge à la fois les cellules individuelles et les plages.

Comment puis-je remplir un fichier Excel à partir d'une base de données ?

L'importation de données depuis des bases de données vers Excel est une exigence courante :

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-7.cs
workSheet["A1:L1"].Style.SetBackgroundColor("#d3d3d3");
workSheet("A1:L1").Style.SetBackgroundColor("#d3d3d3")
$vbLabelText   $csharpLabel

Cet exemple illustre la lecture de données Excel à partir de bases de données, l'application d'une mise en forme et l'utilisation de formules pour les calculs. La propriété NumberFormat permet la personnalisation du format de nombre comme dans Excel.


Comment appliquer une mise en forme aux cellules Excel ?

Comment puis-je définir les couleurs d'arrière-plan dans Excel ?

Les arrière-plans, les couleurs alternées des lignes et les dérogations de couleurs de police passent tous par l'objet Style sur une cellule ou une plage :

// Set header row background to light gray using hex color
workSheet["A1:L1"].Style.SetBackgroundColor("#d3d3d3");

// Apply different colors for data categorization
workSheet["A2:A11"].Style.SetBackgroundColor("#E7F3FF"); // Light blue for January
workSheet["B2:B11"].Style.SetBackgroundColor("#FFF2CC"); // Light yellow for February

// Highlight important cells with bold colors
workSheet["L12"].Style.SetBackgroundColor("#FF0000"); // Red for totals
workSheet["L12"].Style.Font.FontColor = "#FFFFFF"; // White text

// Create alternating row colors for better readability
for (int row = 2; row <= 11; row++)
{
    if (row % 2 == 0)
    {
        workSheet[$"A{row}:L{row}"].Style.SetBackgroundColor("#F2F2F2");
    }
}
// Set header row background to light gray using hex color
workSheet["A1:L1"].Style.SetBackgroundColor("#d3d3d3");

// Apply different colors for data categorization
workSheet["A2:A11"].Style.SetBackgroundColor("#E7F3FF"); // Light blue for January
workSheet["B2:B11"].Style.SetBackgroundColor("#FFF2CC"); // Light yellow for February

// Highlight important cells with bold colors
workSheet["L12"].Style.SetBackgroundColor("#FF0000"); // Red for totals
workSheet["L12"].Style.Font.FontColor = "#FFFFFF"; // White text

// Create alternating row colors for better readability
for (int row = 2; row <= 11; row++)
{
    if (row % 2 == 0)
    {
        workSheet[$"A{row}:L{row}"].Style.SetBackgroundColor("#F2F2F2");
    }
}
' Set header row background to light gray using hex color
workSheet("A1:L1").Style.SetBackgroundColor("#d3d3d3")

' Apply different colors for data categorization
workSheet("A2:A11").Style.SetBackgroundColor("#E7F3FF") ' Light blue for January
workSheet("B2:B11").Style.SetBackgroundColor("#FFF2CC") ' Light yellow for February

' Highlight important cells with bold colors
workSheet("L12").Style.SetBackgroundColor("#FF0000") ' Red for totals
workSheet("L12").Style.Font.FontColor = "#FFFFFF" ' White text

' Create alternating row colors for better readability
For row As Integer = 2 To 11
	If row Mod 2 = 0 Then
		workSheet($"A{row}:L{row}").Style.SetBackgroundColor("#F2F2F2")
	End If
Next row
$vbLabelText   $csharpLabel

La méthode SetBackgroundColor accepte les codes couleur hexadécimaux. Associez les couleurs de fond avec Font.FontColor pour garder le contraste lisible sur des remplissages plus sombres.

Comment créer des bordures dans Excel ?

Les frontières permettent de définir les régions de données et d'améliorer leur structure :

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-9.cs
// Use IronXL built-in aggregations
decimal sum = workSheet["A2:A11"].Sum();
decimal avg = workSheet["B2:B11"].Avg();
decimal max = workSheet["C2:C11"].Max();
decimal min = workSheet["D2:D11"].Min();

// Assign value to cells
workSheet["A12"].Value = sum;
workSheet["B12"].Value = avg;
workSheet["C12"].Value = max;
workSheet["D12"].Value = min;
' Use IronXL built-in aggregations
Dim sum As Decimal = workSheet("A2:A11").Sum()
Dim avg As Decimal = workSheet("B2:B11").Avg()
Dim max As Decimal = workSheet("C2:C11").Max()
Dim min As Decimal = workSheet("D2:D11").Min()

' Assign value to cells
workSheet("A12").Value = sum
workSheet("B12").Value = avg
workSheet("C12").Value = max
workSheet("D12").Value = min
$vbLabelText   $csharpLabel

IronXL prend en charge différents types de bordures, notamment fines, moyennes, épaisses, doubles, pointillées et en pointillés. Chaque bord peut être stylisé indépendamment.


How Do I Use Excel Formulas in C#?

IronXL évalue les formules Excel lors de l'écriture, donc les valeurs sont correctes dès que le classeur est enregistré :

// Use built-in aggregation functions for ranges
decimal sum = workSheet["A2:A11"].Sum();
decimal avg = workSheet["B2:B11"].Avg();
decimal max = workSheet["C2:C11"].Max();
decimal min = workSheet["D2:D11"].Min();

// Assign calculated values to cells
workSheet["A12"].Value = sum;
workSheet["B12"].Value = avg;
workSheet["C12"].Value = max;
workSheet["D12"].Value = min;

// Or use Excel formulas directly
workSheet["A12"].Formula = "=SUM(A2:A11)";
workSheet["B12"].Formula = "=AVERAGE(B2:B11)";
workSheet["C12"].Formula = "=MAX(C2:C11)";
workSheet["D12"].Formula = "=MIN(D2:D11)";

// Complex formulas with multiple functions
workSheet["E12"].Formula = "=IF(SUM(E2:E11)>50000,\"Over Budget\",\"On Track\")";
workSheet["F12"].Formula = "=SUMIF(F2:F11,\">5000\")";

// Percentage calculations
workSheet["G12"].Formula = "=G11/SUM(G2:G11)*100";
workSheet["G12"].FormatString = "0.00%";

// Ensure all formulas calculate
workSheet.EvaluateAll();
// Use built-in aggregation functions for ranges
decimal sum = workSheet["A2:A11"].Sum();
decimal avg = workSheet["B2:B11"].Avg();
decimal max = workSheet["C2:C11"].Max();
decimal min = workSheet["D2:D11"].Min();

// Assign calculated values to cells
workSheet["A12"].Value = sum;
workSheet["B12"].Value = avg;
workSheet["C12"].Value = max;
workSheet["D12"].Value = min;

// Or use Excel formulas directly
workSheet["A12"].Formula = "=SUM(A2:A11)";
workSheet["B12"].Formula = "=AVERAGE(B2:B11)";
workSheet["C12"].Formula = "=MAX(C2:C11)";
workSheet["D12"].Formula = "=MIN(D2:D11)";

// Complex formulas with multiple functions
workSheet["E12"].Formula = "=IF(SUM(E2:E11)>50000,\"Over Budget\",\"On Track\")";
workSheet["F12"].Formula = "=SUMIF(F2:F11,\">5000\")";

// Percentage calculations
workSheet["G12"].Formula = "=G11/SUM(G2:G11)*100";
workSheet["G12"].FormatString = "0.00%";

// Ensure all formulas calculate
workSheet.EvaluateAll();
' Use built-in aggregation functions for ranges
Dim sum As Decimal = workSheet("A2:A11").Sum()
Dim avg As Decimal = workSheet("B2:B11").Avg()
Dim max As Decimal = workSheet("C2:C11").Max()
Dim min As Decimal = workSheet("D2:D11").Min()

' Assign calculated values to cells
workSheet("A12").Value = sum
workSheet("B12").Value = avg
workSheet("C12").Value = max
workSheet("D12").Value = min

' Or use Excel formulas directly
workSheet("A12").Formula = "=SUM(A2:A11)"
workSheet("B12").Formula = "=AVERAGE(B2:B11)"
workSheet("C12").Formula = "=MAX(C2:C11)"
workSheet("D12").Formula = "=MIN(D2:D11)"

' Complex formulas with multiple functions
workSheet("E12").Formula = "=IF(SUM(E2:E11)>50000,""Over Budget"",""On Track"")"
workSheet("F12").Formula = "=SUMIF(F2:F11,"">5000"")"

' Percentage calculations
workSheet("G12").Formula = "=G11/SUM(G2:G11)*100"
workSheet("G12").FormatString = "0.00%"

' Ensure all formulas calculate
workSheet.EvaluateAll()
$vbLabelText   $csharpLabel

La classe Range fournit des méthodes comme Sum, Average, Max et Min pour des calculs rapides. Pour des scénarios plus complexes, utilisez la propriété Formula pour définir directement les formules Excel.

{t :(Privilégiez les méthodes intégrées .Sum(), .Avg(), .Max() et .Min() d'IronXL aux chaînes de formules brutes lors du travail avec des plages. Elles sont typées et évitent les erreurs de syntaxe de formule à la compilation.)}


Comment puis-je définir les propriétés de la feuille de calcul et d'impression ?

Utilisez IronXL pour protéger les feuilles de calcul individuelles, figer les lignes et les colonnes et définir les options de format d'impression.

Comment configurer les propriétés d'une feuille de calcul ?

Protéger les feuilles de calcul et contrôler les options d'affichage :

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-11.cs
workSheet.SetPrintArea("A1:L12");
workSheet.PrintSetup.PrintOrientation = IronXL.Printing.PrintOrientation.Landscape;
workSheet.PrintSetup.PaperSize = IronXL.Printing.PaperSize.A4;
workSheet.SetPrintArea("A1:L12")
workSheet.PrintSetup.PrintOrientation = IronXL.Printing.PrintOrientation.Landscape
workSheet.PrintSetup.PaperSize = IronXL.Printing.PaperSize.A4
$vbLabelText   $csharpLabel

La protection des feuilles de calcul empêche les modifications accidentelles, tandis que le gel des volets permet de garder les lignes ou colonnes importantes visibles pendant le défilement.

Volets figés Figure 7 - La ligne d'en-tête figée reste visible lors du défilement

Dialogue de protection Excel nécessitant un mot de passe pour modifier une feuille protégée Figure 8 - La protection par mot de passe empêche les modifications non autorisées

Comment configurer les paramètres de page et d'impression ?

Les options de mise en page d'impression (orientation, taille du papier, marges, mise à l'échelle, en-têtes, pieds de page) sont toutes exposées via WorkSheet.PrintSetup :

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-12.cs
workBook.SaveAs("Budget.xlsx");
workBook.SaveAs("Budget.xlsx")
$vbLabelText   $csharpLabel

La classe IPrintSetup fournit des options de configuration d'impression complètes assorties aux paramètres d'impression d'Excel.

Aperçu avant impression Excel montrant l'orientation paysage et les paramètres de taille du papier A4 Figure 9 - Aperçu avant impression avec orientation paysage et marges personnalisées


Comment enregistrer mon classeur Excel ?

Enregistrez votre classeur dans différents formats :

// Save as XLSX (recommended for modern Excel)
workBook.SaveAs("Budget.xlsx");

// Save as XLS for legacy compatibility
workBook.SaveAs("Budget.xls");

// Save as CSV for data exchange
workBook.SaveAsCsv("Budget.csv");

// Save as JSON for web applications
workBook.SaveAsJson("Budget.json");

// Save to stream for web downloads or cloud storage
using (var stream = new MemoryStream())
{
    workBook.SaveAs(stream);
    byte[] excelData = stream.ToArray();
    // Send to client or save to cloud
}

// Save with specific encoding for international characters
workBook.SaveAsCsv("Budget_UTF8.csv", System.Text.Encoding.UTF8);
// Save as XLSX (recommended for modern Excel)
workBook.SaveAs("Budget.xlsx");

// Save as XLS for legacy compatibility
workBook.SaveAs("Budget.xls");

// Save as CSV for data exchange
workBook.SaveAsCsv("Budget.csv");

// Save as JSON for web applications
workBook.SaveAsJson("Budget.json");

// Save to stream for web downloads or cloud storage
using (var stream = new MemoryStream())
{
    workBook.SaveAs(stream);
    byte[] excelData = stream.ToArray();
    // Send to client or save to cloud
}

// Save with specific encoding for international characters
workBook.SaveAsCsv("Budget_UTF8.csv", System.Text.Encoding.UTF8);
' Save as XLSX (recommended for modern Excel)
workBook.SaveAs("Budget.xlsx")

' Save as XLS for legacy compatibility
workBook.SaveAs("Budget.xls")

' Save as CSV for data exchange
workBook.SaveAsCsv("Budget.csv")

' Save as JSON for web applications
workBook.SaveAsJson("Budget.json")

' Save to stream for web downloads or cloud storage
Using stream = New MemoryStream()
	workBook.SaveAs(stream)
	Dim excelData() As Byte = stream.ToArray()
	' Send to client or save to cloud
End Using

' Save with specific encoding for international characters
workBook.SaveAsCsv("Budget_UTF8.csv", System.Text.Encoding.UTF8)
$vbLabelText   $csharpLabel

IronXL prend en charge plusieurs formats d'exportation, notamment XLSX, XLS, CSV, TSV et JSON. La méthode Save choisit le format à partir de l'extension du fichier.

  • XLSX / XLS : Format Excel complet avec mise en forme, formules et plusieurs feuilles
  • CSV : Texte brut pour l'échange de données, une feuille par fichier
  • JSON : Format de sortie structuré pour les API web et les pipelines de données
  • Stream : Sortie en mémoire, utile pour les téléchargements web ou le stockage cloud

Combien de temps prend réellement la génération ?

J'ai effectué un benchmark de génération sur une boîte Windows 11 (.NET 9.0.7) pour obtenir des chiffres concrets pour un classeur de la taille que la plupart des exportations en production atteignent. Le harnais construit un XLSX à 10 000 lignes et trois colonnes en mémoire et l'écrit sur le disque lors d'un seul appel SaveAs, à la fois à froid et à chaud. Le projet complet se trouve dans l'exemple CreateExcelBenchmark ci-dessous. Trois lancements de processus distincts ont abouti approximativement ici :

Opération Premier lancement à froid (processus frais) Moyenne à chaud sur 10 itérations
Construire un XLSX de 10 000 lignes et 3 colonnes et SaveAs une fois ~570–910 ms ~350 ms (plage de 240–450 ms)

Le nombre à froid est dominé par le chargement de l'assemblage d'IronXL et le réchauffement du JIT. Une fois le processus chaud, la génération tombe dans la plage des 300 ms intermédiaires avec une certaine variance entre les exécutions due à l'activité d'arrière-plan. Pour des classeurs beaucoup plus volumineux (des centaines de milliers de lignes, plusieurs feuilles, forte stylisation), j'écris l'ensemble du classeur en mémoire et appelle SaveAs exactement une fois à la fin. La cause la plus courante des tickets "pourquoi mon export est-il si lent ?" que nous voyons est l'appel de SaveAs à plusieurs reprises à l'intérieur d'une boucle alors que le classeur est en croissance : chaque sauvegarde sérialise tout l'état actuel, donc le coût augmente à chaque itération.


Pièges courants

Quelques éléments mordent les gens assez souvent pour mériter leur propre section.

Oubli de FormatString sur les dates et les monnaies

Le piège de formatage que je vois le plus : définir .Value à un DateTime mais oublier FormatString. La date est stockée correctement, mais Excel l'affiche comme un numéro de série brut (45292 signifie 2024-01-01) tant que vous n'avez pas appliqué une chaîne de format comme "yyyy-MM-dd". La monnaie a le même problème : le nombre est correct, mais sans "$#,##0.00" il s'affiche comme un simple décimal. Je note maintenant la valeur et le format sur des lignes adjacentes, de sorte que les deux ne peuvent pas diverger :

var dateCell = sheet["A2"];
dateCell.Value = DateTime.Today;
dateCell.FormatString = "yyyy-MM-dd";

var moneyCell = sheet["B2"];
moneyCell.Value = 1499.95m;
moneyCell.FormatString = "$#,##0.00";
var dateCell = sheet["A2"];
dateCell.Value = DateTime.Today;
dateCell.FormatString = "yyyy-MM-dd";

var moneyCell = sheet["B2"];
moneyCell.Value = 1499.95m;
moneyCell.FormatString = "$#,##0.00";
Dim dateCell = sheet("A2")
dateCell.Value = DateTime.Today
dateCell.FormatString = "yyyy-MM-dd"

Dim moneyCell = sheet("B2")
moneyCell.Value = 1499.95D
moneyCell.FormatString = "$#,##0.00"
$vbLabelText   $csharpLabel

XLS va tronquer silencieusement à 65 536 lignes

Celui-ci est mentionné dans la section de choix du format en haut de l'article, mais il mérite sa place ici parce que le mode d'échec est silencieux : ExcelFileFormat.XLS plafonne à 65 536 lignes par feuille, et les lignes au-delà de cette limite sont abandonnées sans exception ni avertissement. L'exportation "réussit" et vos données sont parties. Choisissez XLSX pour tout ce qui est lourd en données, sauf si un système en aval ne peut pas littéralement le lire.

"Excel dit que le fichier est corrompu"

Si un fichier généré refuse de s'ouvrir ou qu'Excel déclare qu'il est corrompu, la cause est presque toujours l'une des deux choses. Soit le flux de fichier n'a pas été correctement disposé, donc les octets sur disque sont tronqués ; ou vous avez écrit à un chemin qui était encore verrouillé par une exécution précédente, et seules certaines données sont passées. Assurez-vous que SaveAs (ou le flux qui l'entoure) est complètement terminé avant que quoi que ce soit d'autre ne touche le fichier, et préférez un bloc using autour de tout MemoryStream ou FileStream que vous emballez un classeur.

Projet d'exemple pour les chiffres de benchmark

Si vous voulez reproduire les chiffres de temps précédents, le banc d'essai est une petite application console .NET 9 :

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-15.cs
// CreateExcelBenchmark/Program.cs (excerpt)
IronXL.License.LicenseKey = Environment.GetEnvironmentVariable("IRONXL_LICENSE_KEY");

var sw = Stopwatch.StartNew();
var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
var sheet = workbook.CreateWorkSheet("Data");
sheet["A1"].Value = "Id";
sheet["B1"].Value = "Name";
sheet["C1"].Value = "Amount";
for (int i = 0; i < 10_000; i++)
{
    int row = i + 2;
    sheet[$"A{row}"].Value = i + 1;
    sheet[$"B{row}"].Value = $"Item {i + 1}";
    sheet[$"C{row}"].Value = (i + 1) * 1.25m;
}
workbook.SaveAs("Generated.xlsx");
sw.Stop();
Console.WriteLine($"cold: {sw.Elapsed.TotalMilliseconds:F1} ms");
Imports System
Imports System.Diagnostics
Imports IronXL

Module Program
    Sub Main()
        License.LicenseKey = Environment.GetEnvironmentVariable("IRONXL_LICENSE_KEY")

        Dim sw As Stopwatch = Stopwatch.StartNew()
        Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
        Dim sheet As WorkSheet = workbook.CreateWorkSheet("Data")
        sheet("A1").Value = "Id"
        sheet("B1").Value = "Name"
        sheet("C1").Value = "Amount"
        For i As Integer = 0 To 9999
            Dim row As Integer = i + 2
            sheet($"A{row}").Value = i + 1
            sheet($"B{row}").Value = $"Item {i + 1}"
            sheet($"C{row}").Value = (i + 1) * 1.25D
        Next
        workbook.SaveAs("Generated.xlsx")
        sw.Stop()
        Console.WriteLine($"cold: {sw.Elapsed.TotalMilliseconds:F1} ms")
    End Sub
End Module
$vbLabelText   $csharpLabel

Exécutez-le sous dotnet run -c Release et échangez les comptes de lignes, de colonnes, ou de stylisation pour voir comment les chiffres évoluent avec la complexité du classeur.


Référence et ressources relatives aux objets

La Référence de l'API IronXL couvre chaque classe et méthode abordée dans ce tutoriel et celles qu'il ne couvre pas.

Tutoriels supplémentaires pour les opérations Excel connexes :

Résumé

IronXL.Excel génère des classeurs Excel aux formats XLSX, XLS, CSV et JSON sans dépendre de Microsoft Office ou d'Interop. La recette que je suis à chaque projet est la même : créer le classeur, ajouter une feuille, écrire les valeurs et les formules, définir des chaînes de format là où l'affichage compte, et sauvegarder une fois à la fin.

Prêt à utiliser IronXL en production ? Démarrez votre essai gratuit ou consultez les options de licence .

Questions Fréquemment Posées

Comment puis-je créer des fichiers Excel en C# sans utiliser Interop ?

Vous pouvez créer des fichiers Excel sans Interop en utilisant IronXL, qui fournit une API simple : WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX). Cette approche fonctionne sur n'importe quelle plateforme .NET sans nécessiter l'installation de Microsoft Office.

Quelles plateformes prennent en charge la création de fichiers Excel avec C# ?

IronXL prend en charge la création de fichiers Excel sur .NET 10, .NET 9, .NET 8, .NET Core, .NET Framework 4.6.2+, fonctionnant sur les environnements Windows, macOS, Linux, Docker, Azure et AWS.

Comment installer une bibliothèque C# pour la génération Excel ?

Installez IronXL via le Gestionnaire de Packages NuGet dans Visual Studio, utilisez la commande PM> Install-Package IronXL.Excel, ou téléchargez directement depuis nuget.org.

Comment créer un nouveau classeur Excel de manière programmatique ?

Créez un classeur en utilisant IronXL avec WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX), puis ajoutez des feuilles de travail en utilisant workbook.CreateWorkSheet("SheetName").

Comment puis-je définir les valeurs des cellules dans une feuille de calcul Excel en utilisant C# ?

Définissez les valeurs des cellules dans IronXL en utilisant une syntaxe intuitive : worksheet["A1"].Value = "Hello World" ou définissez des plages : worksheet["A1:A10"].Value = 100.

Puis-je appliquer du formatage aux cellules Excel de manière programmatique ?

Oui, IronXL prend en charge un formatage complet, y compris les couleurs de fond (cell.Style.SetBackgroundColor("#FF0000")), les bordures, les polices, et les formats de nombre.

Comment utiliser les formules Excel en C# ?

Appliquez les formules en utilisant la propriété Formula de IronXL : worksheet["A1"].Formula = "=SUM(B1:B10)", ou utilisez des méthodes intégrées comme range.Sum(), range.Avg().

Comment puis-je protéger une feuille de calcul Excel avec un mot de passe ?

Protégez les feuilles de calcul dans IronXL en utilisant worksheet.ProtectSheet("YourPassword") pour prévenir les modifications non autorisées.

Comment configurer les paramètres d'impression pour les fichiers Excel ?

Définissez les propriétés d'impression en utilisant le PrintSetup de IronXL : worksheet.PrintSetup.PrintOrientation = PrintOrientation.Landscape et worksheet.SetPrintArea("A1:Z100").

Comment enregistrer un classeur Excel dans différents formats ?

Enregistrez les classeurs en utilisant la méthode SaveAs de IronXL : workbook.SaveAs("file.xlsx") pour XLSX, ou utilisez SaveAsCsv(), SaveAsJson() pour d'autres formats.

Comment remplir une feuille Excel avec des données provenant d'une base de données ?

Utilisez IronXL pour remplir les feuilles de travail en récupérant les données d'une base de données et en les définissant dans les cellules en utilisant des méthodes comme worksheet["A1"].Value = dataFromDatabase.

Comment puis-je implémenter des volets figés dans une feuille Excel en utilisant C# ?

Figez les volets dans les feuilles de travail en utilisant IronXL avec worksheet.FreezePanes(1, 1) pour verrouiller la première ligne et la première colonne pour une navigation plus facile.

Jacob Mellor, Directeur technique @ Team Iron
Directeur technique

Jacob Mellor est directeur de la technologie chez Iron Software et un ingénieur visionnaire pionnier de la technologie C# PDF. En tant que développeur à l'origine de la base de code centrale d'Iron Software, il a façonné l'architecture des produits de l'entreprise depuis sa création, la ...

Lire la suite
Prêt à commencer?
Nuget Téléchargements 2,134,203 | Version : 2026.7 vient de sortir
Still Scrolling Icon

Vous faites encore défiler ?

Vous voulez une preuve rapidement ? PM > Install-Package IronXL.Excel
exécuter un échantillon regarder vos données devenir une feuille de calcul.