How to Create an Excel File in C# (.NET Tutorial)
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.
-
Installez IronXL avec le Gestionnaire de Packages NuGet
-
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"); -
Déployez pour tester sur votre environnement de production.
Commencez à utiliser IronXL dans votre projet dès aujourd'hui avec un essai gratuit
Flux de travail minimal (5 étapes)
- Téléchargez et installez la bibliothèque IronXL C#
- Configurez votre projet .NET
- Créer un
Workbooket unWorksheet - Définir les valeurs des cellules, la mise en forme et les formules
- Enregistrez votre fichier Excel
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.
Figure 3 - Accéder au gestionnaire de packages NuGet via le menu Projet
Figure 4 - Menu contextuel clic droit dans l'explorateur de solutions
Recherchez IronXL.Excel dans la liste des packages et cliquez sur Installer.
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.
Figure 6 - Téléchargez la bibliothèque IronXL depuis le site officiel
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 :
- Ouvrir Visual Studio
- Cliquez sur Fichier > ; Nouveau projet
- Sélectionnez Web sous Visual C# dans la liste Type de projet
-
Sélectionnez une application Web ASP.NET

Figure 1 – Create new ASP.NET project
- Cliquez sur OK
-
Sélectionner le modèle de Formulaires Web

Figure 2 – Select Web Forms template
- 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")
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"
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
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
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")
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
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
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()
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
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.
Figure 7 - La ligne d'en-tête figée reste visible lors du défilement
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")
La classe IPrintSetup fournit des options de configuration d'impression complètes assorties aux paramètres d'impression d'Excel.
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)
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"
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
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.

