Passer au contenu du pied de page
UTILISATION D'IRONXL

Comment lire des fichiers Excel OpenOffice en C# sans avoir Excel installé ?

La lecture et le traitement des fichiers OpenDocument Spreadsheet (ODS) et Excel en C# sont simples lorsque vous utilisez la bibliothèque appropriée. Avec IronXL , vous chargez n'importe quel fichier XLS, XLSX, ODS ou CSV dans un objet WorkBook en utilisant un seul appel de méthode - aucune installation de Microsoft Excel requise, aucun enregistrement COM et aucun problème d'interopérabilité. Ce guide vous accompagne à chaque étape : installation du package, chargement des fichiers, extraction des valeurs des cellules saisies, utilisation des feuilles de calcul nommées, gestion des cellules fusionnées et déploiement sur des environnements Linux ou conteneurisés.

Comment installer IronXL dans un projet .NET ?

Installation du gestionnaire de packages NuGet

Ajoutez IronXL à votre projet via le gestionnaire de packages NuGet . Ouvrez la console du Package Manager dans Visual Studio et exécutez :

Install-Package IronXL
dotnet add package IronXL
Install-Package IronXL
dotnet add package IronXL
SHELL

IronXL est compatible avec .NET 8, .NET 9, .NET 10, .NET Framework 4.6.2+ et .NET Standard 2.0, ce qui le rend compatible avec les bases de code modernes et anciennes. Une fois le package installé, ajoutez la directive using IronXL; en haut de tout fichier utilisant des feuilles de calcul, et vous pourrez ouvrir votre premier classeur.

Pour Azure Functions, les conteneurs Docker ou les API hébergées sous Linux, aucune configuration d'exécution supplémentaire n'est requise. La bibliothèque intègre en interne tout ce dont elle a besoin et ne fait pas appel aux composants d'automatisation d'Excel.

Comment charger un fichier OpenOffice ou Excel en C# ?

IronXL traite les fichiers ODS, XLS, XLSX et CSV de manière identique via la méthode WorkBook.Load. Vous indiquez un chemin de fichier absolu ou relatif, et la bibliothèque détecte le format à partir de l'en-tête du fichier, et pas seulement de son extension. Cela signifie qu'un fichier renommé de .ods à .xlsx est toujours lu correctement.

using IronXL;

// Load an OpenDocument Spreadsheet (.ods) produced by LibreOffice Calc or OpenOffice
WorkBook workbook = WorkBook.Load("quarterly_report.ods");

// Access the first worksheet by index
WorkSheet sheet = workbook.WorkSheets[0];

// Read a cell value
string companyName = sheet["A1"].StringValue;
int recordCount   = sheet["B1"].IntValue;

Console.WriteLine($"Company : {companyName}");
Console.WriteLine($"Records : {recordCount}");
using IronXL;

// Load an OpenDocument Spreadsheet (.ods) produced by LibreOffice Calc or OpenOffice
WorkBook workbook = WorkBook.Load("quarterly_report.ods");

// Access the first worksheet by index
WorkSheet sheet = workbook.WorkSheets[0];

// Read a cell value
string companyName = sheet["A1"].StringValue;
int recordCount   = sheet["B1"].IntValue;

Console.WriteLine($"Company : {companyName}");
Console.WriteLine($"Records : {recordCount}");
$vbLabelText   $csharpLabel

La même commande fonctionne pour les fichiers XLSX et XLS ; il suffit de modifier le chemin d'accès. WorkBook.Load renvoie le même objet fortement typé quel que soit le format source, donc le reste de votre code reste identique, que le fichier provienne de Microsoft Excel, LibreOffice ou de toute autre application compatible ODF.

Comment lire chaque ligne et chaque cellule d'une feuille de calcul ?

Itération sur la collection Rows

L'itération sur toutes les lignes et cellules est la tâche de traitement Excel la plus courante, que ce soit pour valider des données importées, transformer des enregistrements ou alimenter un pipeline de reporting. IronXL expose une collection Rows sur chaque WorkSheet :

using IronXL;

WorkBook workbook  = WorkBook.Load("customers.xlsx");
WorkSheet worksheet = workbook.WorkSheets[0];

Console.WriteLine($"Total rows    : {worksheet.RowCount}");
Console.WriteLine($"Total columns : {worksheet.ColumnCount}");
Console.WriteLine();

foreach (var row in worksheet.Rows)
{
    foreach (var cell in row)
    {
        if (!cell.IsEmpty)
            Console.Write($"{cell.StringValue,-20}");
    }
    Console.WriteLine();
}
using IronXL;

WorkBook workbook  = WorkBook.Load("customers.xlsx");
WorkSheet worksheet = workbook.WorkSheets[0];

Console.WriteLine($"Total rows    : {worksheet.RowCount}");
Console.WriteLine($"Total columns : {worksheet.ColumnCount}");
Console.WriteLine();

foreach (var row in worksheet.Rows)
{
    foreach (var cell in row)
    {
        if (!cell.IsEmpty)
            Console.Write($"{cell.StringValue,-20}");
    }
    Console.WriteLine();
}
$vbLabelText   $csharpLabel

Les propriétés RowCount et ColumnCount ne renvoient que la plage remplie ; les lignes et colonnes vides de fin ne sont pas incluses. La vérification de cell.IsEmpty avant la lecture évite un traitement inutile sur les feuilles clairsemées.

Pour les fichiers volumineux, envisagez d'utiliser l'accès basé sur la plage (worksheet["A1:D500"]) au lieu de l'itération sur la feuille entière. Cela limite le nombre de cellules chargées en mémoire et accélère le traitement lorsque vous n'avez besoin que d'un sous-ensemble des données.

Comment extraire les valeurs saisies dans les cellules ?

Accesseurs de propriété dactylographiés

Dans une feuille de calcul réelle, les cellules contiennent des chaînes de caractères, des entiers, des nombres décimaux, des booléens et des dates. IronXL expose des propriétés typées dédiées, vous n'aurez donc jamais à analyser manuellement des chaînes de caractères brutes :

using IronXL;

WorkBook workbook = WorkBook.Load("inventory.xlsx");
WorkSheet sheet   = workbook.GetWorkSheet("Products");

// Typed accessors handle conversion automatically
string  productName = sheet["A2"].StringValue;
int     quantity    = sheet["B2"].IntValue;
decimal unitPrice   = sheet["C2"].DecimalValue;
bool    inStock     = sheet["D2"].BoolValue;
DateTime? lastAudit = sheet["E2"].DateTimeValue;

Console.WriteLine($"Product  : {productName}");
Console.WriteLine($"Qty      : {quantity}");
Console.WriteLine($"Price    : {unitPrice:C}");
Console.WriteLine($"In Stock : {inStock}");
Console.WriteLine($"Audited  : {lastAudit?.ToString("d") ?? "Never"}");
using IronXL;

WorkBook workbook = WorkBook.Load("inventory.xlsx");
WorkSheet sheet   = workbook.GetWorkSheet("Products");

// Typed accessors handle conversion automatically
string  productName = sheet["A2"].StringValue;
int     quantity    = sheet["B2"].IntValue;
decimal unitPrice   = sheet["C2"].DecimalValue;
bool    inStock     = sheet["D2"].BoolValue;
DateTime? lastAudit = sheet["E2"].DateTimeValue;

Console.WriteLine($"Product  : {productName}");
Console.WriteLine($"Qty      : {quantity}");
Console.WriteLine($"Price    : {unitPrice:C}");
Console.WriteLine($"In Stock : {inStock}");
Console.WriteLine($"Audited  : {lastAudit?.ToString("d") ?? "Never"}");
$vbLabelText   $csharpLabel

Lorsqu'une cellule contient une formule, IronXL l'évalue et renvoie le résultat calculé via les mêmes propriétés typées. Vous n'avez pas besoin d'appeler une méthode d'évaluation distincte. Pour les cellules susceptibles d'être vides ou de contenir un type incompatible, la bibliothèque renvoie la valeur par défaut de ce type plutôt que de lever une exception, ce qui simplifie la logique de validation des entrées.

Propriétés des valeurs de cellule IronXL et leurs types .NET équivalents
Propriété Type .NET Renvoie une valeur lorsqu'elle est vide. Remarques
`StringValue` `chaîne` Chaîne vide Toujours sûr ; convertit n'importe quelle cellule en texte
`IntValue` `int` `0` Tronque les nombres décimaux
`DecimalValue` `decimal` `0m` Préserve la précision des données financières
`DoubleValue` `double` `0.0` À utiliser pour des valeurs scientifiques ou statistiques
`BoolValue` `bool` `false` Lit les cellules VRAI/FAUX d'Excel
`DateTimeValue` `DateTime?` `null` Nullable -- à vérifier avant utilisation

Comment travailler avec plusieurs feuilles de calcul nommées ?

Accès par nom, index ou itération

Les feuilles de calcul Enterprise contiennent souvent plusieurs feuilles nommées : une par mois, une par région ou une par gamme de produits. IronXL vous offre plusieurs façons d'y accéder :

using IronXL;

WorkBook workbook = WorkBook.Load("annual_sales.xlsx");

// Option 1: access by name (throws if the sheet does not exist)
WorkSheet januarySheet = workbook.GetWorkSheet("January");

// Option 2: iterate all sheets in the workbook
foreach (WorkSheet ws in workbook.WorkSheets)
{
    Console.WriteLine($"Sheet: {ws.Name}  |  Rows: {ws.RowCount}");

    // Read the header row from each sheet
    string header = ws["A1"].StringValue;
    Console.WriteLine($"  Header: {header}");
}

// Option 3: access by zero-based index
WorkSheet lastSheet = workbook.WorkSheets[workbook.WorkSheets.Count - 1];
Console.WriteLine($"Last sheet: {lastSheet.Name}");
using IronXL;

WorkBook workbook = WorkBook.Load("annual_sales.xlsx");

// Option 1: access by name (throws if the sheet does not exist)
WorkSheet januarySheet = workbook.GetWorkSheet("January");

// Option 2: iterate all sheets in the workbook
foreach (WorkSheet ws in workbook.WorkSheets)
{
    Console.WriteLine($"Sheet: {ws.Name}  |  Rows: {ws.RowCount}");

    // Read the header row from each sheet
    string header = ws["A1"].StringValue;
    Console.WriteLine($"  Header: {header}");
}

// Option 3: access by zero-based index
WorkSheet lastSheet = workbook.WorkSheets[workbook.WorkSheets.Count - 1];
Console.WriteLine($"Last sheet: {lastSheet.Name}");
$vbLabelText   $csharpLabel

Lorsque le nom de la feuille est connu au moment de la conception, GetWorkSheet est l'option la plus claire. Pour le traitement dynamique -- où les noms de feuilles proviennent de l'entrée utilisateur ou de la configuration -- l'itération de la collection WorkSheets évite les hypothèses codées en dur et gère les classeurs avec un nombre variable de feuilles.

Comment gérez-vous les cellules fusionnées et les régions formatées ?

Les rapports et les tableaux de bord utilisent fréquemment des cellules fusionnées pour les en-têtes, les étiquettes groupées et les lignes de synthèse. IronXL lit la valeur de la cellule en haut à gauche d'une région fusionnée, exactement comme Excel l'affiche :

using IronXL;

WorkBook workbook = WorkBook.Load("report_with_merges.xlsx");
WorkSheet sheet   = workbook.DefaultWorkSheet;

// The merged region A1:D1 stores its value in cell A1
string reportTitle = sheet["A1"].StringValue;
Console.WriteLine($"Report title : {reportTitle}");

// Read cell formatting metadata
var titleCell = sheet["A1"];
Console.WriteLine($"Bold         : {titleCell.Style.Font.Bold}");
Console.WriteLine($"Font size    : {titleCell.Style.Font.Height}");

// Scan an entire column for non-empty section headers
foreach (var cell in sheet["A1:A100"])
{
    if (!cell.IsEmpty && cell.Style.Font.Bold)
        Console.WriteLine($"Section header at {cell.AddressString}: {cell.StringValue}");
}
using IronXL;

WorkBook workbook = WorkBook.Load("report_with_merges.xlsx");
WorkSheet sheet   = workbook.DefaultWorkSheet;

// The merged region A1:D1 stores its value in cell A1
string reportTitle = sheet["A1"].StringValue;
Console.WriteLine($"Report title : {reportTitle}");

// Read cell formatting metadata
var titleCell = sheet["A1"];
Console.WriteLine($"Bold         : {titleCell.Style.Font.Bold}");
Console.WriteLine($"Font size    : {titleCell.Style.Font.Height}");

// Scan an entire column for non-empty section headers
foreach (var cell in sheet["A1:A100"])
{
    if (!cell.IsEmpty && cell.Style.Font.Bold)
        Console.WriteLine($"Section header at {cell.AddressString}: {cell.StringValue}");
}
$vbLabelText   $csharpLabel

L'arbre de propriétés Style reflète la structure de la spécification OOXML SpreadsheetML , les noms de propriétés vous sembleront donc familiers si vous avez travaillé avec le SDK Open XML. Cependant, IronXL encapsule toute cette complexité dans une API claire qui ne nécessite aucune manipulation XML de votre part.

Comment importer des fichiers CSV avec la même API ?

Les fichiers CSV produits par les exportations de bases de données, les systèmes CRM et les applications héritées peuvent être lus via le même appel WorkBook.Load. IronXL déduit le délimiteur du contenu du fichier :

using IronXL;

// Load a comma-separated values file -- same method, same API
WorkBook csvWorkbook  = WorkBook.Load("export.csv");
WorkSheet csvSheet    = csvWorkbook.DefaultWorkSheet;

Console.WriteLine($"CSV rows loaded: {csvSheet.RowCount}");

// Process rows exactly like any other worksheet
foreach (var row in csvSheet.Rows)
{
    string id   = row[0].StringValue;
    string name = row[1].StringValue;
    Console.WriteLine($"{id,-10} {name}");
}
using IronXL;

// Load a comma-separated values file -- same method, same API
WorkBook csvWorkbook  = WorkBook.Load("export.csv");
WorkSheet csvSheet    = csvWorkbook.DefaultWorkSheet;

Console.WriteLine($"CSV rows loaded: {csvSheet.RowCount}");

// Process rows exactly like any other worksheet
foreach (var row in csvSheet.Rows)
{
    string id   = row[0].StringValue;
    string name = row[1].StringValue;
    Console.WriteLine($"{id,-10} {name}");
}
$vbLabelText   $csharpLabel

Après le chargement, vous pouvez enregistrer les données au format XLSX en utilisant csvWorkbook.SaveAs("output.xlsx"). Il s'agit d'un schéma courant pour les pipelines de conversion CSV vers Excel : recevoir un fichier CSV, l'enrichir avec des colonnes calculées ou une mise en forme, puis renvoyer un rapport XLSX formaté à l'utilisateur.

Pour les fichiers séparés par des tabulations ou des délimiteurs personnalisés, utilisez WorkBook.LoadCSV("file.tsv", fileFormat: ExcelFileFormat.TSV) pour spécifier explicitement le format.

Formats de fichiers d'entrée pris en charge par IronXL
Format Extension Produit par Remarques
XLSX `.xlsx` Excel 2007+, LibreOffice Format moderne par défaut ; basé sur XML
XLS `.xls` Excel 97-2003 Format binaire ; prise en charge complète en lecture/écriture
ODS `.ods` LibreOffice, OpenOffice Norme de feuille de calcul OpenDocument
CSV `.csv` Toute application Délimiteur détecté automatiquement ; aucune mise en forme
TSV `.tsv` Exportations de bases de données Délimité par des tabulations ; spécifiez explicitement le format.

Comment IronXL se compare-t-il à Microsoft.Office.Interop.Excel ?

Interopérabilité, kit de développement logiciel Open XML et IronXL côte à côte

L'alternative la plus courante à IronXL pour l'automatisation Excel dans .NET est Microsoft.Office.Interop.Excel . Comprendre les compromis vous aide à choisir l'outil adapté à votre projet.

Microsoft Interop encapsule le modèle objet COM d'Excel. Cela signifie qu'Excel doit être installé sur chaque machine exécutant votre code, y compris les serveurs web, les agents de compilation et les machines virtuelles cloud. La gestion du cycle de vie des objets COM est manuelle : vous devez libérer explicitement chaque objet Range, Worksheet et Workbook, sinon les processus Excel s'accumulent en arrière-plan et consomment de la mémoire jusqu'au redémarrage du serveur. La question des licences est également préoccupante : le CLUF d'Office interdit l'automatisation côté serveur dans de nombreux cas de figure.

IronXL s'affranchit de toutes ces contraintes. Il s'agit d'une bibliothèque purement gérée, sans aucune dépendance à COM. L'objet WorkBook est une classe .NET standard ; Le ramasse-miettes se charge du nettoyage. Vous pouvez exécuter le même code sur un ordinateur portable de développeur, un service d'application Azure, un conteneur Docker ou un Raspberry Pi sous Linux.

Le kit de développement logiciel Open XML de Microsoft est une autre solution. Il permet d'accéder directement au format de fichier OOXML sans nécessiter Excel, mais il fonctionne à un niveau très bas : vous manipulez directement les éléments XML. La lecture de la valeur d'une seule cellule nécessite de parcourir des tables de chaînes partagées, des références de cellules et des index de style. IronXL intègre tout cela dans l'appel à une seule ligne sheet["A1"].StringValue présenté tout au long de ce guide.

Comment déployer le traitement Excel sur Linux et Docker ?

C'est lors des déploiements sur serveur que l'indépendance d'IronXL vis-à-vis d'Excel prend toute sa valeur. Le même code que vous écrivez sous Windows s'exécute sans modification sous Ubuntu, Alpine Linux ou macOS. Pour les déploiements conteneurisés, votre Dockerfile ne nécessite aucune configuration particulière :

# Standard .NET runtime image -- no Office packages needed
FROM mcr.microsoft.com/dotnet/runtime:10.0
WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "ExcelProcessor.dll"]
# Standard .NET runtime image -- no Office packages needed
FROM mcr.microsoft.com/dotnet/runtime:10.0
WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "ExcelProcessor.dll"]
SHELL

Pour Azure Functions et AWS Lambda, IronXL fonctionne dans l'environnement d'exécution géré sans aucune configuration supplémentaire. La surcharge liée au démarrage à froid est minimale car il n'y a pas d'étape d'initialisation COM.

La sécurité des threads est intégrée : plusieurs threads peuvent ouvrir simultanément différentes instances WorkBook sans coordination. Si vous devez traiter des milliers de fichiers en parallèle -- par exemple, dans une tâche en arrière-plan qui ingère des feuilles de calcul téléchargées par l'utilisateur -- vous pouvez utiliser Parallel.ForEach ou Task.WhenAll sur un pool d'instances WorkBook sans risque de corruption.

L'utilisation de la mémoire reste prévisible car IronXL ne charge en mémoire que la feuille de calcul demandée, et non l'intégralité du classeur lors de l'initialisation. Pour les fichiers très volumineux, cette distinction est importante : un classeur contenant dix feuilles de 50 Mo ne nécessite pas 500 Mo de RAM pour lire une seule feuille. La documentation relative aux performances IronXL décrit des stratégies supplémentaires pour la gestion des scénarios de traitement de fichiers à volume élevé.

Quelles sont vos prochaines étapes ?

La méthode la plus rapide pour valider IronXL dans votre projet consiste à installer le package NuGet et à exécuter les exemples de ce guide sur un fichier réel de votre environnement. Une licence d'essai gratuite débloque toutes les fonctionnalités sans aucune modification de code requise lorsque vous êtes prêt pour la production.

Explorez les fonctionnalités connexes IronXL qui complètent la lecture de fichiers :

Pour toute question relative aux licences, à la compatibilité multiplateforme ou aux exigences spécifiques en matière de format de fichier, l' équipe d'assistance IronXL est disponible par chat en direct et par e-mail.

Commencez avec IronXL maintenant.
green arrow pointer

Questions Fréquemment Posées

Comment puis-je lire des fichiers Open Office Excel en C# sans avoir Excel installé ?

Vous pouvez utiliser la bibliothèque IronXL pour lire des fichiers OpenOffice Excel en C# sans avoir à installer Excel sur votre serveur. Elle vous permet de charger efficacement les fichiers XLS, XLSX, ODS et CSV en un seul appel à la méthode WorkBook.Load.

Quels types de fichiers Excel peuvent être traités avec IronXL?

IronXL prend en charge le traitement de divers formats de fichiers Excel, notamment les fichiers XLS, XLSX, ODS (OpenDocument Spreadsheet) et CSV, ce qui le rend polyvalent pour différentes applications de tableur, y compris LibreOffice et OpenOffice.

Pourquoi les développeurs devraient-ils utiliser IronXL plutôt que Microsoft Interop pour lire les fichiers Excel ?

IronXL offre une méthode plus simple et plus efficace pour gérer les fichiers Excel sans avoir besoin de Microsoft Excel ni d'interopérabilité COM, réduisant ainsi la complexité et la charge sur les serveurs de production et permettant les déploiements Linux et Docker.

IronXL peut-il gérer les fichiers créés dans des applications tableur autres que MS Excel ?

Oui, IronXL peut lire et traiter des fichiers provenant d'autres applications tableurs telles qu'OpenOffice Calc et LibreOffice Calc, ce qui en fait un outil flexible pour les développeurs travaillant avec des formats compatibles ODS et ODF.

Est-il nécessaire d'installer Excel sur les serveurs de production pour utiliser IronXL?

Non, avec IronXL, il n'est pas nécessaire d'installer Excel sur les serveurs de production, ce qui simplifie le déploiement et réduit les besoins de maintenance. IronXL fonctionne sous Windows, Linux, macOS et dans des conteneurs Docker.

IronXL prend-il en charge le traitement des fichiers CSV ?

Oui, IronXL prend entièrement en charge la lecture et le traitement des fichiers CSV ainsi que d'autres formats Excel tels que XLS, XLSX et ODS en utilisant la même API WorkBook.Load.

Quels sont les avantages d'utiliser IronXL pour les développeurs .NET ?

IronXL offre aux développeurs .NET une bibliothèque facile à utiliser pour lire, écrire et manipuler des fichiers Excel sans avoir besoin de Microsoft Excel, améliorant ainsi la productivité et réduisant le temps de développement grâce à une API claire et fortement typée.

Comment IronXL améliore-t-il l'efficacité du traitement des fichiers Excel ?

IronXL améliore l'efficacité en éliminant le besoin de logiciels Excel, en fournissant des accesseurs de valeurs de cellules typés, un traitement concurrent sécurisé pour les threads et une solution légère qui traite les fichiers Excel directement dans les applications .NET .

Jordi Bardia
Ingénieur logiciel
Jordi est le plus compétent en Python, C# et C++, et lorsqu'il ne met pas à profit ses compétences chez Iron Software, il programme des jeux. Partageant les responsabilités des tests de produit, du développement de produit et de la recherche, Jordi apporte une immense valeur à l'amé...
Lire la suite

Équipe de soutien Iron

Nous sommes en ligne 24 heures sur 24, 5 jours sur 7.
Chat
Email
Appelez-moi