Comment lire des fichiers Excel en C# (Tutoriel pour développeurs)
Ce tutoriel explique comment lire un fichier Excel en C# ;, ainsi que d'effectuer des tâches quotidiennes telles que la validation de données, la conversion de bases de données, les intégrations d'API Web et la modification de formules. Cet article fait référence à des exemples de code qui utilisent la bibliothèque IronXL for .NET Excel.
Vue d'ensemble
How to Read Excel File in C#
- Téléchargez la bibliothèque C# pour lire les fichiers Excel
- Charger et lire un fichier Excel (classeur)
- Créer un classeur Excel en CSV ou XLSX
- Modifier les valeurs d'une cellule dans une plage de cellules
- Valider les données d'une feuille de calcul
- Exporter des données à l'aide d'Entity Framework
IronXL facilite la lecture et l'édition de documents Microsoft Excel avec C&num ;. IronXL ne nécessite ni Microsoft Excel ni Interop. En fait, IronXL offre une API plus rapide et plus intuitive que Microsoft.Office.Interop.Excel
.
IronXL Comprend&colon ;
- Support produit dédié par nos ingénieurs .NET
- Installation facile via Microsoft Visual Studio
-
Essai gratuit pour le développement. Licences à partir de $749.
La lecture et la création de fichiers Excel en C# ; et VB.NET sont faciles grâce à la bibliothèque logicielle IronXL.
Lecture des fichiers Excel .XLS et .XLSX à l'aide d'IronXL
Vous trouverez ci-dessous un résumé du processus global de lecture des fichiers Excel à l'aide d'IronXL :
-
Installez la bibliothèque IronXL Excel. Nous pouvons faire cela en utilisant notre package NuGet ou en téléchargeant le DLL .Net Excel.
-
Utilisez la méthode
WorkBook.Load
pour lire tout document XLS, XLSX ou CSV. - Obtenez les valeurs des cellules en utilisant une syntaxe intuitive :
sheet["A11"].DecimalValue
:path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-1.cs
using IronXL;
using System;
using System.Linq;
// Supported spreadsheet formats for reading include: XLSX, XLS, CSV and TSV
WorkBook workBook = WorkBook.Load("test.xlsx");
WorkSheet workSheet = workBook.WorkSheets.First();
// Select cells easily in Excel notation and return the calculated value
int cellValue = workSheet["A2"].IntValue;
// Read from Ranges of cells elegantly.
foreach (var cell in workSheet["A2:A10"])
{
Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text);
}
// Advanced Operations
// Calculate aggregate values such as Min, Max and Sum
decimal sum = workSheet["A2:A10"].Sum();
// Linq compatible
decimal max = workSheet["A2:A10"].Max(c => c.DecimalValue);
Imports IronXL
Imports System
Imports System.Linq
' Supported spreadsheet formats for reading include: XLSX, XLS, CSV and TSV
Private workBook As WorkBook = WorkBook.Load("test.xlsx")
Private workSheet As WorkSheet = workBook.WorkSheets.First()
' Select cells easily in Excel notation and return the calculated value
Private cellValue As Integer = workSheet("A2").IntValue
' Read from Ranges of cells elegantly.
For Each cell In workSheet("A2:A10")
Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text)
Next cell
' Advanced Operations
' Calculate aggregate values such as Min, Max and Sum
Dim sum As Decimal = workSheet("A2:A10").Sum()
' Linq compatible
Dim max As Decimal = workSheet("A2:A10").Max(Function(c) c.DecimalValue)
Les exemples de code utilisés dans les sections suivantes de ce didacticiel (ainsi que le code du projet d'exemple) fonctionneront sur trois feuilles de calcul Excel d'exemple (voir ci-dessous pour un aperçu visuel) :
Tutoriel
1. Téléchargez GRATUITEMENT la bibliothèque IronXL C&num ;
Commencez à utiliser IronXL dans votre projet dès aujourd'hui avec un essai gratuit.
La première chose à faire est d'installer la bibliothèque IronXL.Excel
, ajoutant la fonctionnalité Excel au cadre .NET.
L'installation de IronXL.Excel
est le plus facilement réalisée en utilisant notre package NuGet, bien que vous puissiez également choisir d'installer manuellement le DLL dans votre projet ou dans votre cache d'assemblage global.
Installation du paquetage NuGet IronXL
-
Dans Visual Studio, faites un clic droit sur le projet et sélectionnez "Manage NuGet Packages ..."
-
Recherchez le paquet IronXL.Excel et cliquez sur le bouton Installer pour l'ajouter au projet
Une autre façon d'installer la bibliothèque IronXL est d'utiliser la console du gestionnaire de paquets NuGet :
-
Entrer dans la console du gestionnaire de paquets
- Type
> Install-Package IronXL.Excel
PM > Install-Package IronXL.Excel
De plus, vous pouvez voir le package sur le site NuGet
Installation manuelle
Alternativement, nous pouvons commencer par télécharger le fichier .NET Excel DLL d'IronXL et l'installer manuellement dans Visual Studio.
2. Charger un classeur Excel
La classe WorkBook
représente une feuille Excel. Pour ouvrir un fichier Excel en C#, nous utilisons la méthode WorkBook.Load
, en spécifiant le chemin du fichier Excel.
:path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-2.cs
WorkBook workBook = WorkBook.Load(@"Spreadsheets\\GDP.xlsx");
Dim workBook As WorkBook = WorkBook.Load("Spreadsheets\\GDP.xlsx")
Exemple : ExcelToDBProcessor
Chaque WorkBook
peut avoir plusieurs objets WorkSheet
. Chacune représente une seule feuille de calcul Excel dans le document Excel. Utilisez la méthode WorkBook.GetWorkSheet
pour récupérer une référence à une feuille de calcul Excel spécifique.
:path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-3.cs
``
Exemple : *ExcelToDB*
### Création de nouveaux documents Excel
Pour créer un nouveau document Excel, construisez un nouvel objet `WorkBook` avec un type de fichier valide.
```cs
:path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-4.cs
Exemple : ApiToExcelProcessor
Remarque : Utilisez ExcelFileFormat.XLS
pour prendre en charge les versions héritées de Microsoft Excel (95 et antérieures).
Ajouter une feuille de calcul à un document Excel
Comme expliqué précédemment, un WorkBook
IronXL contient une collection d'un ou plusieurs WorkSheet
s.
Pour créer une nouvelle WorkSheet
, appelez WorkBook.CreateWorkSheet
avec le nom de la feuille de calcul.
:path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-5.cs
WorkSheet workSheet = workBook.GetWorkSheet("GDPByCountry");
Dim workSheet As WorkSheet = workBook.GetWorkSheet("GDPByCountry")
3. Accéder aux valeurs des cellules
Lire et éditer une seule cellule
L'accès aux valeurs des cellules individuelles de la feuille de calcul s'effectue en récupérant la cellule souhaitée depuis son WorkSheet
. comme indiqué ci-dessous :
:path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-16.cs
WorkBook workBook = WorkBook.Load("test.xlsx");
WorkSheet workSheet = workBook.DefaultWorkSheet;
IronXL.Cell cell = workSheet["B1"].First();
Dim workBook As WorkBook = WorkBook.Load("test.xlsx")
Dim workSheet As WorkSheet = workBook.DefaultWorkSheet
Dim cell As IronXL.Cell = workSheet("B1").First()
La classe Cell
d'IronXL représente une cellule individuelle dans une feuille de calcul Excel. Elle contient des propriétés et des méthodes qui permettent aux utilisateurs d'accéder à la valeur de la cellule et de la modifier directement.
Chaque objet WorkSheet
gère un index d'objets Cell
correspondant à chaque valeur de cellule dans une feuille de calcul Excel. Dans le code source ci-dessus, nous référons la cellule souhaitée par son indice de ligne et de colonne (la cellule B1 dans ce cas) en utilisant la syntaxe standard de l'indexation de tableau.
Avec une référence à l'objet Cell, nous pouvons lire et écrire des données dans une cellule de feuille de calcul :
:path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-17.cs
IronXL.Cell cell = workSheet["B1"].First();
string value = cell.StringValue; // Read the value of the cell as a string
Console.WriteLine(value);
cell.Value = "10.3289"; // Write a new value to the cell
Console.WriteLine(cell.StringValue);
Dim cell As IronXL.Cell = workSheet("B1").First()
Dim value As String = cell.StringValue ' Read the value of the cell as a string
Console.WriteLine(value)
cell.Value = "10.3289" ' Write a new value to the cell
Console.WriteLine(cell.StringValue)
Lire et écrire une plage de valeurs de cellules
La classe Range
représente une collection bidimensionnelle d'objets Cell
. Cette collection fait référence à une plage littérale de cellules Excel. Obtenez des plages en utilisant l'indexeur de chaîne sur un objet WorkSheet
.
Le texte de l'argument est soit la coordonnée d'une cellule (par exemple "A1", comme indiqué précédemment) soit une étendue de cellules de gauche à droite de haut en bas (par exemple "B2:E5"). Il est également possible d'appeler GetRange
sur un WorkSheet
.
:path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-6.cs
Range range = workSheet["D2:D101"];
Dim range As Range = workSheet("D2:D101")
Exemple : DataValidation
Il existe plusieurs façons de lire ou de modifier les valeurs des cellules d'une plage. Si le nombre est connu, utilisez une boucle For.
:path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-7.cs
// Iterate through the rows
for (var y = 2; y <= 101; y++)
{
var result = new PersonValidationResult { Row = y };
results.Add(result);
// Get all cells for the person
var cells = workSheet[$"A{y}:E{y}"].ToList();
// Validate the phone number (1 = B)
var phoneNumber = cells[1].Value;
result.PhoneNumberErrorMessage = ValidatePhoneNumber(phoneNumberUtil, (string)phoneNumber);
// Validate the email address (3 = D)
result.EmailErrorMessage = ValidateEmailAddress((string)cells[3].Value);
// Get the raw date in the format of Month Day[suffix], Year (4 = E)
var rawDate = (string)cells[4].Value;
result.DateErrorMessage = ValidateDate(rawDate);
}
' Iterate through the rows
For y = 2 To 101
Dim result = New PersonValidationResult With {.Row = y}
results.Add(result)
' Get all cells for the person
Dim cells = workSheet($"A{y}:E{y}").ToList()
' Validate the phone number (1 = B)
Dim phoneNumber = cells(1).Value
result.PhoneNumberErrorMessage = ValidatePhoneNumber(phoneNumberUtil, CStr(phoneNumber))
' Validate the email address (3 = D)
result.EmailErrorMessage = ValidateEmailAddress(CStr(cells(3).Value))
' Get the raw date in the format of Month Day[suffix], Year (4 = E)
Dim rawDate = CStr(cells(4).Value)
result.DateErrorMessage = ValidateDate(rawDate)
Next y
Exemple : DataValidation
Ajouter une formule à une feuille de calcul
Définissez la formule des Cell
es avec la propriété Formula
.
Le code ci-dessous parcourt chaque État et inscrit un pourcentage total dans la colonne C.
:path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-13.cs
// Iterate through all rows with a value
for (var y = 2 ; y < i ; y++)
{
// Get the C cell
Cell cell = workSheet[$"C{y}"].First();
// Set the formula for the Percentage of Total column
cell.Formula = $"=B{y}/B{i}";
}
' Iterate through all rows with a value
Dim y = 2
Do While y < i
' Get the C cell
Dim cell As Cell = workSheet($"C{y}").First()
' Set the formula for the Percentage of Total column
cell.Formula = $"=B{y}/B{i}"
y += 1
Loop
Exemple : AddFormulaeProcessor
Valider les données d'une feuille de calcul
Utilisez IronXL pour valider une feuille de données. L'exemple DataValidation
utilise libphonenumber-csharp
pour valider les numéros de téléphone et utilise les API standard C# pour valider les adresses email et les dates.
:path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-8.cs
// Iterate through the rows
for (var i = 2; i <= 101; i++)
{
var result = new PersonValidationResult { Row = i };
results.Add(result);
// Get all cells for the person
var cells = worksheet[$"A{i}:E{i}"].ToList();
// Validate the phone number (1 = B)
var phoneNumber = cells[1].Value;
result.PhoneNumberErrorMessage = ValidatePhoneNumber(phoneNumberUtil, (string)phoneNumber);
// Validate the email address (3 = D)
result.EmailErrorMessage = ValidateEmailAddress((string)cells[3].Value);
// Get the raw date in the format of Month Day[suffix], Year (4 = E)
var rawDate = (string)cells[4].Value;
result.DateErrorMessage = ValidateDate(rawDate);
}
' Iterate through the rows
For i = 2 To 101
Dim result = New PersonValidationResult With {.Row = i}
results.Add(result)
' Get all cells for the person
Dim cells = worksheet($"A{i}:E{i}").ToList()
' Validate the phone number (1 = B)
Dim phoneNumber = cells(1).Value
result.PhoneNumberErrorMessage = ValidatePhoneNumber(phoneNumberUtil, CStr(phoneNumber))
' Validate the email address (3 = D)
result.EmailErrorMessage = ValidateEmailAddress(CStr(cells(3).Value))
' Get the raw date in the format of Month Day[suffix], Year (4 = E)
Dim rawDate = CStr(cells(4).Value)
result.DateErrorMessage = ValidateDate(rawDate)
Next i
Le code ci-dessus parcourt en boucle chaque ligne de la feuille de calcul et récupère les cellules sous forme de liste. Chaque méthode validates vérifie la valeur d'une cellule et renvoie un message d'erreur si la valeur n'est pas valide.
Ce code crée une nouvelle feuille, spécifie les en-têtes et affiche les résultats du message d'erreur de manière à ce qu'il y ait un journal des données non valides.
:path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-9.cs
var resultsSheet = workBook.CreateWorkSheet("Results");
resultsSheet["A1"].Value = "Row";
resultsSheet["B1"].Value = "Valid";
resultsSheet["C1"].Value = "Phone Error";
resultsSheet["D1"].Value = "Email Error";
resultsSheet["E1"].Value = "Date Error";
for (var i = 0; i < results.Count; i++)
{
var result = results[i];
resultsSheet[$"A{i + 2}"].Value = result.Row;
resultsSheet[$"B{i + 2}"].Value = result.IsValid ? "Yes" : "No";
resultsSheet[$"C{i + 2}"].Value = result.PhoneNumberErrorMessage;
resultsSheet[$"D{i + 2}"].Value = result.EmailErrorMessage;
resultsSheet[$"E{i + 2}"].Value = result.DateErrorMessage;
}
workBook.SaveAs(@"Spreadsheets\\PeopleValidated.xlsx");
Dim resultsSheet = workBook.CreateWorkSheet("Results")
resultsSheet("A1").Value = "Row"
resultsSheet("B1").Value = "Valid"
resultsSheet("C1").Value = "Phone Error"
resultsSheet("D1").Value = "Email Error"
resultsSheet("E1").Value = "Date Error"
For i = 0 To results.Count - 1
Dim result = results(i)
resultsSheet($"A{i + 2}").Value = result.Row
resultsSheet($"B{i + 2}").Value = If(result.IsValid, "Yes", "No")
resultsSheet($"C{i + 2}").Value = result.PhoneNumberErrorMessage
resultsSheet($"D{i + 2}").Value = result.EmailErrorMessage
resultsSheet($"E{i + 2}").Value = result.DateErrorMessage
Next i
workBook.SaveAs("Spreadsheets\\PeopleValidated.xlsx")
4. Exporter des données à l'aide d'Entity Framework
Utilisez IronXL pour exporter des données vers une base de données ou pour convertir une feuille de calcul Excel en base de données. L'exemple ExcelToDB
lit une feuille de calcul contenant le PIB par pays, puis exporte ces données vers un SQLite.
Il utilise EntityFramework
pour construire la base de données puis exporter les données ligne par ligne.
Ajouter les paquets NuGet SQLite Entity Framework.
EntityFramework
vous permet de créer un objet modèle pouvant exporter des données vers la base de données.
:path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-10.cs
public class Country
{
[Key]
public Guid Key { get; set; }
public string Name { get; set; }
public decimal GDP { get; set; }
}
Public Class Country
<Key>
Public Property Key() As Guid
Public Property Name() As String
Public Property GDP() As Decimal
End Class
Pour utiliser une base de données différente, installez le package NuGet correspondant et trouvez l'équivalent de UseSqLite()
:path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-11.cs
public class CountryContext : DbContext
{
public DbSet<Country> Countries { get; set; }
public CountryContext()
{
//TODO: Make async
Database.EnsureCreated();
}
/// <summary>
/// Configure context to use Sqlite
/// </summary>
/// <param name="optionsBuilder"></param>
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var connection = new SqliteConnection($"Data Source=Country.db");
connection.Open();
var command = connection.CreateCommand();
//Create the database if it doesn't already exist
command.CommandText = $"PRAGMA foreign_keys = ON;";
command.ExecuteNonQuery();
optionsBuilder.UseSqlite(connection);
base.OnConfiguring(optionsBuilder);
}
}
Public Class CountryContext
Inherits DbContext
Public Property Countries() As DbSet(Of Country)
Public Sub New()
'TODO: Make async
Database.EnsureCreated()
End Sub
''' <summary>
''' Configure context to use Sqlite
''' </summary>
''' <param name="optionsBuilder"></param>
Protected Overrides Sub OnConfiguring(ByVal optionsBuilder As DbContextOptionsBuilder)
Dim connection = New SqliteConnection($"Data Source=Country.db")
connection.Open()
Dim command = connection.CreateCommand()
'Create the database if it doesn't already exist
command.CommandText = $"PRAGMA foreign_keys = ON;"
command.ExecuteNonQuery()
optionsBuilder.UseSqlite(connection)
MyBase.OnConfiguring(optionsBuilder)
End Sub
End Class
Créez un CountryContext
, parcourez la plage pour créer chaque enregistrement, puis utilisez SaveAsync
pour valider les données dans la base de données
:path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-12.cs
public async Task ProcessAsync()
{
//Get the first worksheet
var workbook = WorkBook.Load(@"Spreadsheets\\GDP.xlsx");
var worksheet = workbook.GetWorkSheet("GDPByCountry");
//Create the database connection
using (var countryContext = new CountryContext())
{
//Iterate through all the cells
for (var i = 2; i <= 213; i++)
{
//Get the range from A-B
var range = worksheet[$"A{i}:B{i}"].ToList();
//Create a Country entity to be saved to the database
var country = new Country
{
Name = (string)range[0].Value,
GDP = (decimal)(double)range[1].Value
};
//Add the entity
await countryContext.Countries.AddAsync(country);
}
//Commit changes to the database
await countryContext.SaveChangesAsync();
}
}
Public Async Function ProcessAsync() As Task
'Get the first worksheet
Dim workbook = WorkBook.Load("Spreadsheets\\GDP.xlsx")
Dim worksheet = workbook.GetWorkSheet("GDPByCountry")
'Create the database connection
Using countryContext As New CountryContext()
'Iterate through all the cells
For i = 2 To 213
'Get the range from A-B
Dim range = worksheet($"A{i}:B{i}").ToList()
'Create a Country entity to be saved to the database
Dim country As New Country With {
.Name = CStr(range(0).Value),
.GDP = CDec(CDbl(range(1).Value))
}
'Add the entity
Await countryContext.Countries.AddAsync(country)
Next i
'Commit changes to the database
Await countryContext.SaveChangesAsync()
End Using
End Function
Exemple : ExcelToDB
5. Télécharger des données d'une API vers une feuille de calcul
L'appel suivant effectue un appel REST avec RestClient.Net. Il télécharge le JSON et le convertit en une "Liste" du type RestCountry
. Il est ensuite facile de parcourir chaque pays et d'enregistrer les données de l'API REST dans une feuille de calcul Excel.
:path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-14.cs
var client = new Client(new Uri("https://restcountries.eu/rest/v2/"));
List<RestCountry> countries = await client.GetAsync<List<RestCountry>>();
Dim client As New Client(New Uri("https://restcountries.eu/rest/v2/"))
Dim countries As List(Of RestCountry) = Await client.GetAsync(Of List(Of RestCountry))()
Exemple : ApiToExcel
Voici à quoi ressemblent les données JSON de l'API.

Le code suivant parcourt les pays et définit le nom, la population, la région, le code numérique et les trois principales langues dans la feuille de calcul.
:path=/static-assets/excel/content-code-examples/tutorials/how-to-read-excel-file-csharp-15.cs
for (var i = 2; i < countries.Count; i++)
{
var country = countries[i];
//Set the basic values
workSheet[$"A{i}"].Value = country.name;
workSheet[$"B{i}"].Value = country.population;
workSheet[$"G{i}"].Value = country.region;
workSheet[$"H{i}"].Value = country.numericCode;
//Iterate through languages
for (var x = 0; x < 3; x++)
{
if (x > (country.languages.Count - 1)) break;
var language = country.languages[x];
//Get the letter for the column
var columnLetter = GetColumnLetter(4 + x);
//Set the language name
workSheet[$"{columnLetter}{i}"].Value = language.name;
}
}
For i = 2 To countries.Count - 1
Dim country = countries(i)
'Set the basic values
workSheet($"A{i}").Value = country.name
workSheet($"B{i}").Value = country.population
workSheet($"G{i}").Value = country.region
workSheet($"H{i}").Value = country.numericCode
'Iterate through languages
For x = 0 To 2
If x > (country.languages.Count - 1) Then
Exit For
End If
Dim language = country.languages(x)
'Get the letter for the column
Dim columnLetter = GetColumnLetter(4 + x)
'Set the language name
workSheet($"{columnLetter}{i}").Value = language.name
Next x
Next i
Référence d'objets et ressources
Vous pouvez également trouver la [documentation de la classe IronXL](/csharp/excel/object-reference/api/" target="_blank) dans la Référence d'objet de grande valeur.
De plus, il existe d'autres tutoriels qui peuvent éclairer d'autres aspects de IronXL.Excel
, y compris Créer, Ouvrir, Écrire, Modifier, Enregistrer et Exporter des fichiers XLS, XLSX et CSV sans utiliser Excel Interop.
Résumé
IronXL.Excel est une bibliothèque logicielle .NET unique pour la lecture d'une grande variété de formats de feuilles de calcul. Il n'est pas nécessaire d'avoir Microsoft Excel installé, et il ne dépend pas d'Interop.
Si vous trouvez la bibliothèque .NET utile pour modifier des fichiers Excel, vous pourriez également être intéressé par l'exploration de la bibliothèque client API Google Sheets pour .NET qui vous permet de modifier Google Sheets.
Tutoriel Accès rapide
Download this Tutorial as C# Source Code
The full free C# for Excel Source Code for this tutorial is available to download as a zipped Visual Studio 2017 project file.
DownloadExplorer ce tutoriel sur GitHub
The source code for this project is available in C# and VB.NET on GitHub.
Utilisez ce code comme un moyen facile d'être opérationnel en quelques minutes. Le projet est enregistré en tant que projet Microsoft Visual Studio 2017, mais il est compatible avec n'importe quel IDE .NET.
How to Read Excel File in C# on GitHubVoir la référence de l'API
Explorez la référence API d'IronXL, qui décrit en détail toutes les fonctionnalités, les espaces de noms, les classes, les méthodes, les champs et les énums d'IronXL.
Voir la référence de l'API