La lecture d'un fichier Excel en C# est une tâche courante pour les rapports, les importations de données et l'automatisation. Avec Free Spire.XLS for .NET, une édition communautaire gratuite, vous pouvez charger un classeur Excel et lire ses données sans installer Microsoft Excel sur la machine et sans utiliser Interop. Cet article montre comment lire des cellules, des feuilles de calcul et des lignes, exporter une feuille de calcul vers un DataTable et gérer les résultats de formules.
Démarrage rapide : lire un fichier Excel en C#
Installez Free Spire.XLS for .NET depuis NuGet. Exécutez cette commande dans un terminal :
dotnet add package FreeSpire.XLS
Ou exécutez cette commande dans la console du gestionnaire de packages NuGet :
Install-Package FreeSpire.XLS
Vous pouvez également télécharger Free Spire.XLS for .NET et référencer la DLL manuellement, ou trouver le package sur NuGet.
L'exemple suivant charge un fichier Excel, obtient la première feuille de calcul et affiche la valeur de la cellule A1. Remplacez input.xlsx par le chemin complet de votre fichier, ou assurez-vous que le fichier se trouve dans le répertoire de travail actuel du programme.
using System;
using Spire.Xls;
class Program
{
static void Main()
{
Workbook workbook = new Workbook();
try
{
// Load an existing Excel file
workbook.LoadFromFile("input.xlsx");
// Get the first worksheet
Worksheet sheet = workbook.Worksheets[0];
// Read the value of cell A1 (row 1, column 1)
string value = sheet.Range[1, 1].Value;
Console.WriteLine("Cell A1: " + value);
}
finally
{
workbook.Dispose();
}
}
}
Workbook.LoadFromFile() lit le fichier en mémoire. Worksheets[0] renvoie la première feuille de calcul, et Range[1, 1].Value renvoie la valeur texte de la cellule située dans la première ligne et la première colonne. Le bloc finally libère les ressources du classeur lorsque vous avez terminé.

Lire une cellule ou une feuille de calcul spécifique
Les exemples suivants supposent que workbook a déjà été chargé avec LoadFromFile(). Ils montrent comment accéder à une feuille de calcul par index ou par nom.
Un fichier Excel peut contenir plusieurs feuilles de calcul. Vous pouvez obtenir une feuille de calcul par sa position ou par son nom :
// By index (zero-based): the first sheet is 0, the second is 1
Worksheet first = workbook.Worksheets[0];
// By name
Worksheet sales = workbook.Worksheets["Sales"];
Vous pouvez également lire une cellule par ses numéros de ligne et de colonne, ou par son adresse Excel :
// By row and column numbers (one-based): row 2, column 3
string byIndex = sales.Range[2, 3].Value;
// By Excel address
string byAddress = sales.Range["C2"].Value;
Notez les deux points de départ différents. La collection de feuilles de calcul est basée sur zéro, donc la première feuille de calcul est Worksheets[0]. Les numéros de ligne et de colonne des cellules sont basés sur un, donc Range[1, 1] correspond à la cellule A1.
Pour lire un bloc de cellules, passez une adresse de plage et parcourez-la :
CellRange range = sales.Range["A1:C3"];
foreach (CellRange cell in range.CellList)
{
Console.WriteLine({BODY_CONTENT}quot;{cell.RangeAddress}: {cell.Value}");
}
Lire les données Excel ligne par ligne en C#
Pour lire toutes les données d'une feuille de calcul, parcourez les lignes avec une boucle externe et les colonnes avec une boucle interne. Écrivez un saut de ligne après chaque ligne afin que la sortie de la console conserve la structure de la feuille de calcul :
using System;
using Spire.Xls;
class Program
{
static void Main()
{
Workbook workbook = new Workbook();
try
{
workbook.LoadFromFile("input.xlsx");
Worksheet sheet = workbook.Worksheets[0];
for (int row = 1; row <= sheet.LastDataRow; row++)
{
for (int col = 1; col <= sheet.LastDataColumn; col++)
{
Console.Write({BODY_CONTENT}quot;{sheet.Range[row, col].Value}\t");
}
Console.WriteLine();
}
}
finally
{
workbook.Dispose();
}
}
}
Les boucles vont de la ligne 1 et de la colonne 1 jusqu'à LastDataRow et LastDataColumn, qui renvoient la dernière ligne et la dernière colonne contenant des données. Cela évite d'inclure des cellules mises en forme mais vides que LastRow et LastColumn couvriraient. Si votre feuille de calcul a une disposition inhabituelle, vérifiez la plage réelle sur votre fichier de test avant de traiter la sortie.
Pour une feuille de calcul contenant les données d'exemple ci-dessous :
| Produit | Catégorie | Prix |
|---|---|---|
| Clavier | Accessoires | 25 |
| Écran | Affichages | 180 |
la console affiche chaque ligne de la feuille de calcul sur sa propre ligne, avec les valeurs des cellules séparées par des tabulations :
Product Category Price
Keyboard Accessories 25
Monitor Displays 180

Lire les données Excel dans un DataTable
Si vous souhaitez traiter les données d'une feuille de calcul avec ADO.NET, les lier à un contrôle ou les insérer dans une base de données, exportez la feuille de calcul vers un DataTable avec ExportDataTable() :
using System;
using System.Data;
using Spire.Xls;
class Program
{
static void Main()
{
Workbook workbook = new Workbook();
try
{
workbook.LoadFromFile("input.xlsx");
// Recalculate formulas before exporting computed values
workbook.CalculateAllValue();
Worksheet sheet = workbook.Worksheets[0];
DataTable dataTable = sheet.ExportDataTable(
sheet.AllocatedRange,
true, // exportColumnNames
true // computedFormulaValue
);
// Print each row to verify the exported data
foreach (DataRow row in dataTable.Rows)
{
Console.WriteLine(string.Join("\t", row.ItemArray));
}
}
finally
{
workbook.Dispose();
}
}
}
Cette surcharge prend trois paramètres :
-
range : la plage de cellules à exporter.
sheet.AllocatedRangerenvoie la plage utilisée de la feuille de calcul. Selon la mise en forme et les paramètres de plage utilisée du classeur, elle peut inclure des cellules vides. Si vous n'avez besoin que d'une région de données spécifique, utilisez une plage explicite et vérifiez ses limites. -
exportColumnNames : lorsqu'il vaut
true, la première ligne de la plage devient les noms de colonnes duDataTable. Lorsqu'il vautfalse, la première ligne est exportée comme des données ordinaires. -
computedFormulaValue : lorsqu'il vaut
true, l'exportateur utilise les valeurs de formule calculées au lieu du texte de la formule. Lorsqu'il vautfalse, les cellules de formule sont exportées sous forme de texte de formule. Si vos données contiennent des formules, vérifiez les valeurs exportées sur votre propre fichier de test — le calcul des formules peut devoir être déclenché avant l'exportation pour que les résultats soient correctement renseignés.
Pour afficher le résultat dans une application Windows Forms, affectez la table à un DataGridView :
dataGridView1.DataSource = dataTable;
Vérifiez les noms de colonnes et les types de données de la table exportée par rapport à votre propre fichier Excel avant de vous y fier dans un traitement ultérieur. Pour plus d'options, comme l'exportation d'une plage spécifique, consultez le tutoriel détaillé sur la conversion d'Excel en DataTable en C#.

Lire les résultats de formules et gérer les valeurs des cellules
Les extraits de code de cette section supposent que sheet fait référence à une feuille de calcul d'un classeur chargé, comme dans les exemples précédents.
Une cellule qui contient une formule offre deux éléments que vous pouvez vouloir lire : la formule elle-même et le résultat qu'elle produit. Utilisez HasFormula pour vérifier si une cellule contient une formule, Formula pour obtenir le texte de la formule, et FormulaValue pour obtenir le résultat calculé. Si vous avez besoin de résultats de formule à jour, appelez workbook.CalculateAllValue() après avoir chargé le classeur et avant de lire FormulaValue.
CellRange cell = sheet.Range["D2"];
if (cell.HasFormula)
{
Console.WriteLine("Formula: " + cell.Formula);
Console.WriteLine("Result: " + cell.FormulaValue);
}
else
{
Console.WriteLine("Value: " + cell.Value);
}
Pour en savoir plus sur l'utilisation des formules, consultez Ajouter ou lire des formules et des fonctions dans Excel.

Les cellules dont les types de contenu diffèrent peuvent être lues via des propriétés typées :
CellRange priceCell = sheet.Range["C2"];
CellRange dateCell = sheet.Range["E2"];
double price = priceCell.NumberValue; // numeric value
DateTime date = dateCell.DateTimeValue; // date value
string text = sheet.Range["A2"].Text; // text as displayed
Excel stocke les nombres et les dates de manière différente du texte brut, alors choisissez la propriété qui correspond au type de données de la cellule.
Lire les formats de nombre et les valeurs affichées
Pour les cellules dotées de formats de nombre — pourcentages, devises, dates — la valeur stockée, le code de format et le texte formaté peuvent tous différer. Une cellule qui stocke 0.15 avec un format pourcentage s'affiche comme 15%. Utilisez Value pour la valeur brute, NumberFormat pour le code de format, et NumberText pour le texte tel qu'il apparaît dans Excel :
| Propriété | Ce qu'elle renvoie |
|---|---|
Value |
La valeur brute de la cellule |
NumberFormat |
Le code de format de nombre (par ex., 0.00%) |
NumberText |
Le texte après application du format (par ex., 15%) |
CellRange cell = sheet.Range["C2"];
Console.WriteLine("Value: " + cell.Value);
Console.WriteLine("Number format: " + cell.NumberFormat);
Console.WriteLine("Formatted text: " + cell.NumberText);
Choisissez la propriété qui correspond à ce dont votre logique en aval a besoin : la valeur numérique pour les calculs, ou le texte formaté pour l'affichage. Pour en savoir plus sur les formats de nombre, consultez Définir le format de nombre dans Excel.
Avant de lire une cellule, vous pouvez vérifier si elle est vide :
if (string.IsNullOrEmpty(sheet.Range["B5"].Value))
{
Console.WriteLine("B5 is empty.");
}
Questions fréquentes
Puis-je lire des fichiers Excel en C# sans installer Microsoft Excel ?
Oui. Free Spire.XLS lit directement les fichiers Excel et ne nécessite ni Microsoft Excel ni Interop sur l'ordinateur ou le serveur qui exécute votre code.
Comment lire les résultats de formules plutôt que les formules ?
Pour une seule cellule, vérifiez CellRange.HasFormula et lisez CellRange.FormulaValue. Pour lire une feuille de calcul entière, appelez ExportDataTable() avec computedFormulaValue défini sur true. Voir Lire les résultats de formules et gérer les valeurs des cellules.
Puis-je lire des fichiers Excel protégés par mot de passe ?
Oui. Définissez le mot de passe d'ouverture avant de charger le fichier :
Workbook workbook = new Workbook();
workbook.OpenPassword = "your-password";
workbook.LoadFromFile("protected.xlsx");
Quels formats de fichier Excel Free Spire.XLS prend-il en charge ?
Free Spire.XLS prend en charge les formats .xls, .xlsx et .xlsm.
Quelles sont les limitations de l'édition gratuite ?
Free Spire.XLS for .NET est une édition communautaire destinée aux développeurs individuels et aux petits projets. Lorsque vous travaillez avec le format .xls, chaque classeur est limité à 5 feuilles de calcul et à 200 lignes par feuille. Le chargement et l'enregistrement de fichiers .xlsx ne sont pas soumis à ces limites. Pour une capacité supérieure ou des fonctionnalités avancées, Spire.XLS for .NET est disponible en édition commerciale.
Si vous avez besoin d'une capacité supérieure ou de fonctionnalités avancées, Spire.XLS for .NET est l'édition commerciale — vous pouvez demander une licence d'essai gratuite de 30 jours pour l'évaluer.