Création d'une API Excel pour .NET Core: création, lecture et exportation de fichiers XLSX
Créer une API Excel pour .NET Core est simple avec IronXL . Installez le paquet, créez un WorkBook, remplissez les cellules et renvoyez le flux directement - Microsoft Office n'est pas nécessaire.
Install-Package IronXL.Excel
IronXL gère la création de fichiers XLSX, l'importation de données, les exportations multiformats et la mise en forme des cellules entièrement dans du code .NET managé. Il fonctionne sous Windows, Linux et macOS, ce qui en fait un choix pratique pour toute API ASP.NET Core nécessitant une prise en charge programmatique d'Excel.
Comment installer IronXL dans un projet .NET Core ?
Ajoutez IronXL à n'importe quel projet .NET 10 via la console du gestionnaire de packages NuGet :
Install-Package IronXL.Excel
Ou installez-le via l'interface utilisateur NuGet de Visual Studio en recherchant IronXL . Le nom du paquet sur NuGet est @@--CODE-30248--@.
Après l'installation, ajoutez using IronXL; à tout fichier qui crée ou lit des classeurs. Aucune bibliothèque d'interopérabilité Office, aucun enregistrement COM et aucune installation de Microsoft Excel ne sont requis sur la machine hôte : IronXL est entièrement autonome.
IronXL cible .NET Standard 2.0 et versions ultérieures, ce qui signifie que la même bibliothèque fonctionne pour les projets .NET Core, .NET 5/6/7/8/9/10 et .NET Framework . La documentation IronXL couvre en détail tous les environnements pris en charge.
Comment créer des fichiers Excel par programmation en .NET Core?
La création de documents Excel à partir de zéro ne nécessite que quelques lignes de code grâce à l'API intuitive d'IronXL. La bibliothèque offre un contrôle total sur les classeurs, les feuilles de calcul, les styles de cellules et les formules grâce à un modèle objet clair.
Voici une action de contrôleur qui crée un nouveau classeur Excel avec des données formatées, illustre la gestion des feuilles de calcul et applique des styles de cellules :
using IronXL;
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("api/[controller]")]
public class ExcelController : ControllerBase
{
[HttpGet("create-report")]
public IActionResult CreateSalesReport()
{
// Create a new Excel workbook in XLSX format
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Sales Data");
// Set header labels in the first row
worksheet["A1"].Value = "Product";
worksheet["B1"].Value = "Q1 Sales";
worksheet["C1"].Value = "Q2 Sales";
worksheet["D1"].Value = "Total";
// Bold headers and apply a blue background with white text
worksheet["A1:D1"].Style.Font.Bold = true;
worksheet["A1:D1"].Style.SetBackgroundColor("#4472C4");
worksheet["A1:D1"].Style.Font.SetColor("#FFFFFF");
// Add data rows
worksheet["A2"].Value = "Widget Pro";
worksheet["B2"].Value = 15000;
worksheet["C2"].Value = 18500;
worksheet["D2"].Formula = "=B2+C2";
worksheet["A3"].Value = "Gadget Plus";
worksheet["B3"].Value = 22000;
worksheet["C3"].Value = 24000;
worksheet["D3"].Formula = "=B3+C3";
// Apply currency number format to sales columns
worksheet["B2:D3"].Style.Format = "$#,##0";
// Stream the XLSX file back to the caller
var stream = workbook.ToStream();
return File(
stream,
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"SalesReport.xlsx");
}
}
using IronXL;
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("api/[controller]")]
public class ExcelController : ControllerBase
{
[HttpGet("create-report")]
public IActionResult CreateSalesReport()
{
// Create a new Excel workbook in XLSX format
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Sales Data");
// Set header labels in the first row
worksheet["A1"].Value = "Product";
worksheet["B1"].Value = "Q1 Sales";
worksheet["C1"].Value = "Q2 Sales";
worksheet["D1"].Value = "Total";
// Bold headers and apply a blue background with white text
worksheet["A1:D1"].Style.Font.Bold = true;
worksheet["A1:D1"].Style.SetBackgroundColor("#4472C4");
worksheet["A1:D1"].Style.Font.SetColor("#FFFFFF");
// Add data rows
worksheet["A2"].Value = "Widget Pro";
worksheet["B2"].Value = 15000;
worksheet["C2"].Value = 18500;
worksheet["D2"].Formula = "=B2+C2";
worksheet["A3"].Value = "Gadget Plus";
worksheet["B3"].Value = 22000;
worksheet["C3"].Value = 24000;
worksheet["D3"].Formula = "=B3+C3";
// Apply currency number format to sales columns
worksheet["B2:D3"].Style.Format = "$#,##0";
// Stream the XLSX file back to the caller
var stream = workbook.ToStream();
return File(
stream,
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"SalesReport.xlsx");
}
}
Imports IronXL
Imports Microsoft.AspNetCore.Mvc
<ApiController>
<Route("api/[controller]")>
Public Class ExcelController
Inherits ControllerBase
<HttpGet("create-report")>
Public Function CreateSalesReport() As IActionResult
' Create a new Excel workbook in XLSX format
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim worksheet As WorkSheet = workbook.CreateWorkSheet("Sales Data")
' Set header labels in the first row
worksheet("A1").Value = "Product"
worksheet("B1").Value = "Q1 Sales"
worksheet("C1").Value = "Q2 Sales"
worksheet("D1").Value = "Total"
' Bold headers and apply a blue background with white text
worksheet("A1:D1").Style.Font.Bold = True
worksheet("A1:D1").Style.SetBackgroundColor("#4472C4")
worksheet("A1:D1").Style.Font.SetColor("#FFFFFF")
' Add data rows
worksheet("A2").Value = "Widget Pro"
worksheet("B2").Value = 15000
worksheet("C2").Value = 18500
worksheet("D2").Formula = "=B2+C2"
worksheet("A3").Value = "Gadget Plus"
worksheet("B3").Value = 22000
worksheet("C3").Value = 24000
worksheet("D3").Formula = "=B3+C3"
' Apply currency number format to sales columns
worksheet("B2:D3").Style.Format = "$#,##0"
' Stream the XLSX file back to the caller
Dim stream = workbook.ToStream()
Return File(
stream,
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"SalesReport.xlsx")
End Function
End Class
Fichier Excel de sortie

WorkBook.Create() prend en charge les formats XLSX et XLS. La méthode CreateWorkSheet() ajoute une feuille nommée dans laquelle vous remplissez les cellules avec des valeurs, appliquez des formules Excel pour les calculs et contrôlez la mise en page par le biais de plages de cellules. Le moteur de calcul d'IronXL évalue automatiquement les formules lorsque les données du classeur changent, y compris la prise en charge des formules matricielles utilisées dans des scénarios d'analyse de données plus complexes.
Les styles de cellules vont bien au-delà du gras et de la couleur. L' API de mise en forme des cellules vous permet de définir les formats numériques, les bordures, l'alignement, les tailles de police et bien plus encore, le tout sans toucher à la couche COM. Cela permet de l'exécuter en toute sécurité dans des environnements Linux conteneurisés où aucun contexte d'affichage n'existe.
Comment ajouter plusieurs feuilles de calcul à un classeur ?
Un seul classeur peut contenir un nombre quelconque de feuilles de calcul. Appelez workbook.CreateWorkSheet("SheetName") pour chaque onglet nécessaire. Les feuilles de travail sont accessibles ultérieurement par nom via workbook.GetWorkSheet("SheetName") ou par index via workbook.WorkSheets[0].
Ce modèle est utile pour générer des rapports de synthèse et de détail : une feuille contient les totaux agrégés tandis que les feuilles enfants contiennent les lignes de transaction brutes. La documentation relative à la gestion des feuilles de calcul explique comment renommer, réorganiser et supprimer des feuilles lors de l'exécution.
Quelle est la meilleure façon de lire des données Excel dans les API Web ?
L'importation de données à partir de fichiers Excel téléchargés par les utilisateurs est essentielle pour toute application web qui traite du contenu de feuilles de calcul. IronXL permet de lire directement les feuilles de calcul Excel : chargez-les à partir d'un flux, parcourez les lignes et extrayez les valeurs saisies de chaque cellule.
[HttpPost("import")]
public IActionResult ImportExcelData(IFormFile file)
{
if (file == null || file.Length == 0)
return BadRequest("No file uploaded");
using var stream = file.OpenReadStream();
// Load the workbook directly from the upload stream
WorkBook workbook = WorkBook.Load(stream);
WorkSheet worksheet = workbook.DefaultWorkSheet;
var records = new List<Dictionary<string, object>>();
// Start at row 2 to skip the header row
for (int row = 2; row <= worksheet.RowCount; row++)
{
var record = new Dictionary<string, object>
{
["Product"] = worksheet[$"A{row}"].StringValue,
["Sales"] = worksheet[$"B{row}"].DecimalValue,
["Date"] = worksheet[$"C{row}"].DateTimeValue
};
records.Add(record);
}
return Ok(new {
message = "Import successful",
recordCount = records.Count,
data = records
});
}
[HttpPost("import")]
public IActionResult ImportExcelData(IFormFile file)
{
if (file == null || file.Length == 0)
return BadRequest("No file uploaded");
using var stream = file.OpenReadStream();
// Load the workbook directly from the upload stream
WorkBook workbook = WorkBook.Load(stream);
WorkSheet worksheet = workbook.DefaultWorkSheet;
var records = new List<Dictionary<string, object>>();
// Start at row 2 to skip the header row
for (int row = 2; row <= worksheet.RowCount; row++)
{
var record = new Dictionary<string, object>
{
["Product"] = worksheet[$"A{row}"].StringValue,
["Sales"] = worksheet[$"B{row}"].DecimalValue,
["Date"] = worksheet[$"C{row}"].DateTimeValue
};
records.Add(record);
}
return Ok(new {
message = "Import successful",
recordCount = records.Count,
data = records
});
}
Imports Microsoft.AspNetCore.Mvc
Imports System.Collections.Generic
Imports IronXL
<HttpPost("import")>
Public Function ImportExcelData(file As IFormFile) As IActionResult
If file Is Nothing OrElse file.Length = 0 Then
Return BadRequest("No file uploaded")
End If
Using stream = file.OpenReadStream()
' Load the workbook directly from the upload stream
Dim workbook As WorkBook = WorkBook.Load(stream)
Dim worksheet As WorkSheet = workbook.DefaultWorkSheet
Dim records As New List(Of Dictionary(Of String, Object))()
' Start at row 2 to skip the header row
For row As Integer = 2 To worksheet.RowCount
Dim record As New Dictionary(Of String, Object) From {
{"Product", worksheet($"A{row}").StringValue},
{"Sales", worksheet($"B{row}").DecimalValue},
{"Date", worksheet($"C{row}").DateTimeValue}
}
records.Add(record)
Next
Return Ok(New With {
.message = "Import successful",
.recordCount = records.Count,
.data = records
})
End Using
End Function
Sortie

WorkBook.Load() ouvre des fichiers Excel à partir de flux, de chemins de fichiers ou de tableaux d'octets. Les cellules sont accessibles via la syntaxe de l'indexeur worksheet["A1"] ou par itération d'une plage de cellules nommée. IronXL gère automatiquement la validation des données et expose des accesseurs à sécurité de type -- IntValue, DecimalValue, DateTimeValue, StringValue -- de sorte que le code de consommation reste propre et prévisible.
Comment filtrer et trier les données importées ?
Après avoir chargé un classeur, appelez .SortAscending() ou .SortDescending() sur n'importe quel objet Range pour trier les lignes. Pour le filtrage, parcourez les cellules et évaluez les conditions en temps réel ou transférez les données dans une collection LINQ pour un traitement ultérieur. Le guide de tri et de filtrage illustre les deux approches à l'aide d'exemples pratiques.
Vous travaillez avec des fichiers volumineux ? IronXL ne lit que les cellules consultées ; il n'est donc pas nécessaire de charger un fichier entier de plusieurs mégaoctets en mémoire avant d'interroger une colonne spécifique. Cette approche d'accès différé maintient une consommation de mémoire stable même lors du traitement de classeurs contenant des dizaines de milliers de lignes.
Comment exporter des données Excel vers différents formats ?
Les applications doivent souvent proposer des feuilles de calcul dans plusieurs formats de sortie. IronXL prend en charge l'exportation aux formats XLSX, XLS, CSV, JSON et HTML en un seul appel de méthode, sans nécessiter d'outils de conversion externes.
[HttpGet("export/{format}")]
public IActionResult ExportData(string format)
{
// Load a pre-designed template workbook
WorkBook workbook = WorkBook.Load("template.xlsx");
return format.ToLower() switch
{
"xlsx" => File(
workbook.ToStream(),
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"export.xlsx"),
"csv" => File(
workbook.ToStream(FileFormat.CSV),
"text/csv",
"export.csv"),
"json" => Ok(workbook.ToJson()),
_ => BadRequest("Unsupported format")
};
}
[HttpGet("export/{format}")]
public IActionResult ExportData(string format)
{
// Load a pre-designed template workbook
WorkBook workbook = WorkBook.Load("template.xlsx");
return format.ToLower() switch
{
"xlsx" => File(
workbook.ToStream(),
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"export.xlsx"),
"csv" => File(
workbook.ToStream(FileFormat.CSV),
"text/csv",
"export.csv"),
"json" => Ok(workbook.ToJson()),
_ => BadRequest("Unsupported format")
};
}
Imports Microsoft.AspNetCore.Mvc
<HttpGet("export/{format}")>
Public Function ExportData(format As String) As IActionResult
' Load a pre-designed template workbook
Dim workbook As WorkBook = WorkBook.Load("template.xlsx")
Select Case format.ToLower()
Case "xlsx"
Return File(workbook.ToStream(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "export.xlsx")
Case "csv"
Return File(workbook.ToStream(FileFormat.CSV), "text/csv", "export.csv")
Case "json"
Return Ok(workbook.ToJson())
Case Else
Return BadRequest("Unsupported format")
End Select
End Function
L'utilisation de modèles Excel avec des mises en page prédéfinies accélère la génération de rapports. Chargez un classeur prédéfini, remplissez des données dynamiques dans des cellules ou des plages nommées, puis diffusez le résultat. Cette approche convient aux rapports de vente, aux factures et aux documents de conformité où la cohérence de la mise en forme prime sur la flexibilité.
La compatibilité multiplateforme d'IronXL signifie que ces opérations sur les fichiers fonctionnent de manière identique sous Windows, Linux et macOS, ce qui le rend adapté aux déploiements conteneurisés .NET Core . Pour en savoir plus, consultez le guide multiplateforme IronXL .
Comment exporter au format CSV depuis une API .NET Core ?
Appelez workbook.ToStream(FileFormat.CSV) et renvoyez-le avec le type de contenu text/csv, comme indiqué ci-dessus. Pour les classeurs à feuilles multiples, chaque feuille peut être exportée indépendamment en accédant à workbook.WorkSheets[index] et en appelant .ToStream(FileFormat.CSV) sur l'objet feuille. La documentation relative à l'exportation CSV couvre la gestion des délimiteurs, l'encodage et les options de format de date.
Comment appliquer la mise en forme conditionnelle et les barres de données ?
Au-delà des styles de cellules de base, IronXL prend en charge les règles de mise en forme conditionnelle : surlignez en vert les cellules au-dessus d'un seuil, signalez les valeurs négatives en rouge ou appliquez des barres de données dégradées pour rendre les tendances immédiatement visibles dans la feuille de calcul sans aucun post-traitement dans un outil séparé.
La mise en forme conditionnelle est particulièrement précieuse dans les tableaux de bord financiers et les rapports d'indicateurs clés de performance (KPI) où les lecteurs doivent repérer les valeurs aberrantes d'un seul coup d'œil. Plutôt que de laisser au destinataire le soin d'appliquer sa propre mise en forme après le téléchargement, les règles sont intégrées au fichier XLSX et sont évaluées automatiquement lorsque le fichier s'ouvre dans n'importe quelle version de Microsoft Excel ou visionneuse compatible.
Le formatage conditionnel est défini par la propriété ConditionalFormatting de la feuille de calcul. Les règles s'appliquent à une plage de cellules nommée et prennent en charge plusieurs types de conditions : comparaisons de valeurs de cellules, règles basées sur des formules, échelles de couleurs qui classent les valeurs de basses à hautes et superpositions de barres de données qui fonctionnent comme des graphiques à barres intégrés aux cellules. La spécification Open XML définit la structure de règles sous-jacente IronXL écrit dans le fichier XLSX.
Pour une documentation complète sur l'application des échelles de couleurs, des jeux d'icônes et des barres de données, consultez le tutoriel sur la mise en forme conditionnelle dans la documentation IronXL .
Comment protéger vos fichiers et feuilles de calcul Excel ?
La diffusion de rapports contenant des données sensibles nécessite un niveau de contrôle d'accès. IronXL prend en charge la protection par mot de passe au niveau du classeur et la protection au niveau de la feuille de calcul :
- Mot de passe du classeur : définissez
workbook.Password = "secret"avant d'appeler.SaveAs()pour crypter le fichier XLSX. Les destinataires doivent saisir le mot de passe pour l'ouvrir dans Excel. - Protection des feuilles de travail : Appelez
worksheet.ProtectSheet("password")pour verrouiller l'édition des cellules tout en permettant la visualisation de la feuille. Des plages spécifiques peuvent être débloquées pour la saisie de données à l'aide de l'APIAllowEditRange. - Distribution en lecture seule : Pour les documents qui ne doivent jamais être modifiés, combinez la protection de la feuille de calcul avec le chiffrement au niveau du fichier.
Les fichiers XLSX protégés par mot de passe utilisent par défaut le chiffrement AES-128, la même norme que celle utilisée par Excel natif. Cela signifie qu'un fichier protégé par IronXL est entièrement compatible avec l'invite d'ouverture de fichier intégrée à Excel ; aucun visualiseur spécial n'est requis côté destinataire.
Ces fonctionnalités de sécurité complètent le modèle de sécurité standard de .NET Core et sont particulièrement utiles lors de la création de points de terminaison de reporting financier ou RH. La documentation relative à la protection des fichiers fournit la référence API complète.
Comment utiliser les formules Excel dans .NET?
Le moteur de calcul intégré d'IronXL évalue les formules Excel standard au moment de l'exécution, de sorte que l'API peut renvoyer des valeurs calculées sans enregistrer sur le disque et rouvrir d'abord dans Excel. Attribuez une chaîne de formule à la propriété .Formula de n'importe quelle cellule :
// Sum a column and place the result in a footer row
worksheet[$"B{lastRow}"].Formula = $"=SUM(B2:B{lastRow - 1})";
// Calculate an average across a range
worksheet[$"C{lastRow}"].Formula = $"=AVERAGE(C2:C{lastRow - 1})";
// Retrieve the computed value immediately
decimal total = worksheet[$"B{lastRow}"].DecimalValue;
// Sum a column and place the result in a footer row
worksheet[$"B{lastRow}"].Formula = $"=SUM(B2:B{lastRow - 1})";
// Calculate an average across a range
worksheet[$"C{lastRow}"].Formula = $"=AVERAGE(C2:C{lastRow - 1})";
// Retrieve the computed value immediately
decimal total = worksheet[$"B{lastRow}"].DecimalValue;
' Sum a column and place the result in a footer row
worksheet($"B{lastRow}").Formula = $"=SUM(B2:B{lastRow - 1})"
' Calculate an average across a range
worksheet($"C{lastRow}").Formula = $"=AVERAGE(C2:C{lastRow - 1})"
' Retrieve the computed value immediately
Dim total As Decimal = worksheet($"B{lastRow}").DecimalValue
IronXL prend en charge la plupart des fonctions Excel standard, notamment les fonctions mathématiques, statistiques, de texte, de date et de recherche. Les formules de tableau (sémantique Ctrl+Shift+Enter) sont également prises en charge pour les scénarios avancés. Comme l'évaluation des formules s'effectue au sein du processus .NET , il n'y a pas d'aller-retour vers un service de calcul externe : les résultats sont disponibles immédiatement après l'attribution de la formule, ce qui permet de maintenir des temps de réponse de l'API prévisibles même lors de calculs sur des milliers de lignes. La liste de référence des formules prises en charge répertorie toutes les fonctions compatibles.
Quelles sont vos prochaines étapes ?
La création d'une API Excel avec IronXL confère aux applications .NET Core de solides capacités pour la manipulation de feuilles de calcul. De la création de fichiers XLSX avec des données formatées et des formules calculées à l'importation des téléchargements des utilisateurs et à l'exportation de données dans de multiples formats, IronXL gère tous les aspects de la manipulation programmatique des feuilles de calcul de manière multiplateforme et sans Office.
Explorez ces ressources pour aller plus loin :
Page produit IronXL : présentation des fonctionnalités et guide de démarrage
- Documentation IronXL : référence API complète et articles pratiques Créer des fichiers Excel en C# : tutoriel détaillé sur la création de classeurs et de feuilles de calcul
- Lire des fichiers Excel en C# : chargement, analyse et extraction de données Exporter Excel au format CSV -- Exportation CSV avec options d'encodage et de délimiteur
- API de mise en forme des cellules : polices, couleurs, bordures et formats numériques
- Mise en forme conditionnelle : règles, barres de données, échelles de couleurs
- Prise en charge des formules -- Référence des fonctions Excel prises en charge
- Protection des fichiers -- API de mot de passe pour les classeurs et les feuilles de calcul
- Package NuGet -- version actuelle et historique des versions
Démarrez un essai gratuit pour tester IronXL dans un projet réel, ou consultez les options de licence pour trouver le plan adapté à un déploiement en production.
Questions Fréquemment Posées
Qu'est-ce qu'IronXL?
IronXL est une bibliothèque Excel .NET qui permet aux développeurs de créer, lire et exporter des fichiers Excel par programmation en C# sans nécessiter Microsoft Office ni l'interopérabilité COM.
Comment créer un fichier Excel en .NET Core sans Office ?
Appelez WorkBook.Create(ExcelFileFormat.XLSX) pour créer un nouveau classeur, ajoutez des feuilles avec CreateWorkSheet(), remplissez les cellules avec la syntaxe worksheet['A1'].Value et diffusez le résultat avec workbook.ToStream().
Comment lire un fichier Excel téléchargé dans ASP.NET Core?
Transmettez le flux IFormFile à WorkBook.Load(stream), accédez à DefaultWorkSheet et parcourez les lignes à l'aide de worksheet.RowCount. Les accesseurs typés tels que DecimalValue et DateTimeValue extraient des données fortement typées de chaque cellule.
IronXL peut-il exporter des données Excel au format CSV ou JSON ?
Oui. Appelez workbook.ToStream(FileFormat.CSV) pour obtenir une sortie CSV ou workbook.ToJson() pour obtenir une représentation JSON des données du classeur.
IronXL fonctionne-t-il sous Linux et macOS ?
Oui. IronXL cible .NET Standard 2.0 et versions ultérieures et fonctionne sous Windows, Linux et macOS sans installation de Microsoft Office ni couche COM.
Comment protéger un fichier Excel par mot de passe avec IronXL?
Définissez la propriété Workbook.Password sur une chaîne de caractères avant d'appeler SaveAs(). Pour une protection au niveau de la feuille de calcul, appelez Worksheet.ProtectSheet('password') afin d'empêcher la modification des cellules tout en autorisant la lecture de la feuille.


