Table des matières
Installer avec Nuget
Install-Package Spire.XLS
Liens connexes
La lecture de fichiers Excel en C# est une exigence courante pour de nombreuses applications, que ce soit pour l'analyse de données, la création de rapports ou l'intégration de bases de données. Bien que les bibliothèques Interop de Microsoft puissent être utilisées, elles présentent des limitations (comme la nécessité d'installer Excel). Au lieu de cela, nous explorerons une approche plus efficace en utilisant Spire.XLS, une bibliothèque .NET qui permet de lire et d'écrire des fichiers Excel sans Interop. Cet article couvre :
- Bibliothèque C# .NET pour lire Excel sans Interop
- Comment lire un fichier Excel en C#
- Lire les données Excel dans un DataTable
- Lire les données Excel dans une base de données
- Conclusion
- FAQ
Bibliothèque C# .NET pour lire Excel sans Interop
L'Interop Excel de Microsoft nécessite l'installation d'Excel sur la machine, ce qui le rend inadapté aux applications côté serveur. Au lieu de cela, des bibliothèques comme Spire.XLS offrent une solution légère et performante sans dépendance vis-à-vis d'Excel.
Pourquoi utiliser Spire.XLS ?
- Aucune installation d'Excel requise – Fonctionne de manière indépendante.
- Prend en charge .NET Core & .NET Framework – Compatibilité multiplateforme.
- Lire/Écrire des fichiers Excel – Prend en charge .xls, .xlsx et .xlsm.
- Importer vers DataTable & Bases de données – Intégration transparente avec ADO.NET.
Installation de Spire.XLS
Pour commencer, installez la bibliothèque via le Gestionnaire de paquets NuGet :
Install-Package Spire.XLS
Alternativement, vous pouvez télécharger Spire.XLS pour .NET depuis notre site officiel et référencer le fichier DLL manuellement.
Comment lire un fichier Excel en C#
Cette section montre comment lire un fichier Excel en C# à l'aide de la bibliothèque Spire.XLS. Le processus implique le chargement du fichier, l'accès aux feuilles de calcul et la récupération des valeurs des cellules par programmation. Ceci est utile pour automatiser l'extraction de données, traiter des rapports Excel ou intégrer des données de feuilles de calcul dans des applications.
Étape 1. Importer l'espace de noms nécessaire
Pour utiliser les fonctionnalités de Spire.XLS, vous devez importer son espace de noms. Cela donne accès à des classes comme Workbook et Worksheet, qui sont essentielles pour les opérations sur les fichiers Excel.
- C#
using Spire.Xls;
Étape 2. Charger un fichier Excel
Pour charger un fichier Excel, créez un objet Workbook et appelez la méthode LoadFromFile. Cela lit le fichier en mémoire, permettant une manipulation ultérieure.
- C#
Workbook wb = new Workbook();
wb.LoadFromFile("input.xlsx");
Étape 3. Obtenir une feuille de calcul spécifique
Les fichiers Excel peuvent contenir plusieurs feuilles de calcul. Vous pouvez accéder à une feuille spécifique en indexant la collection Worksheets (base zéro). La première feuille est à l'index 0, la deuxième à 1, et ainsi de suite.
- C#
Worksheet sheet = wb.Worksheets[0]; //Première feuille
Étape 4. Récupérer la valeur d'une cellule spécifique
Pour récupérer la valeur d'une cellule, utilisez la propriété CellRange.Value. Spécifiez les indices de ligne et de colonne (à partir de 1) pour localiser la cellule. Ceci est utile pour extraire des données structurées comme des en-têtes ou des enregistrements individuels.
- C#
CellRange cell = sheet.Range[1, 1]; // Ligne 1, Colonne 1 (A1)
string value = cell.Value;
Voici un exemple complet de lecture de données à partir d'une feuille de calcul entière et de leur impression dans la console :
- C#
using Spire.Xls;
namespace ReadExcelData
{
class Program
{
static void Main(string[] args)
{
// Create a Workbook object
Workbook wb = new Workbook();
// Load an existing Excel file
wb.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.xlsx");
// Get the first worksheet
Worksheet sheet = wb.Worksheets[0];
// Get the cell range containing data
CellRange locatedRange = sheet.AllocatedRange;
// Iterate through the rows
for (int i = 0; i < locatedRange.Rows.Length; i++)
{
// Iterate through the columns
for (int j = 0; j < locatedRange.Rows[i].ColumnCount; j++)
{
// Get data of a specific cell
string cellValue = locatedRange[i + 1, j + 1].Value?.ToString() ?? "N/A";
// Align output with a width of 22
Console.Write($"{cellValue,-22}");
}
Console.WriteLine();
}
}
}
}
Résultat :

Lire les données Excel dans un DataTable
L'exportation de données Excel dans un DataTable permet une intégration transparente avec des contrôles d'interface utilisateur comme DataGridView ou le traitement de données backend. Spire.XLS simplifie ce processus avec sa méthode intégrée ExportDataTable(), qui convertit automatiquement les données de la feuille de calcul en un DataTable structuré tout en préservant les en-têtes de colonne et les types de données.
Étape 1. Importer l'espace de noms nécessaire
Incluez l'espace de noms Spire.XLS pour accéder aux classes essentielles.
- C#
using Spire.Xls;
Étape 2. Créer un formulaire et un événement de clic de bouton
Créez un formulaire (par exemple, Form1) et ajoutez un bouton avec un gestionnaire d'événements pour lire le fichier Excel.
- C#
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
// Le code ira ici
}
}
Étape 3. Charger le classeur
Dans l'événement de clic du bouton, créez un objet Workbook et chargez le fichier Excel.
- C#
Workbook wb = new Workbook();
wb.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.xlsx");
Étape 4. Exporter les données vers DataTable
Accédez à une feuille de calcul spécifique par son index et exportez ses données vers un DataTable à l'aide de la méthode ExportDataTable.
- C#
DataTable dataTable = wb.Worksheets[0].ExportDataTable();
Étape 5. Lier les données à DataGridView
En supposant que vous ayez un contrôle DataGridView sur votre formulaire, liez le DataTable au DataGridView pour afficher les données.
- C#
dataGridView1.DataSource = dataTable;
Voici le code complet pour lire les données d'un fichier Excel dans un DataTable et les afficher dans un contrôle DataGridView de Windows Forms :
- C#
using Spire.Xls;
using System.Data;
namespace ReadExcelIntoDataTable
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
// Create a Workbook object
Workbook wb = new Workbook();
// Load an existing Excel file
wb.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.xlsx");
// Get the first worksheet
Worksheet sheet = wb.Worksheets[0];
// Export data from worksheet into a DataTable
DataTable dataTable = sheet.ExportDataTable();
// Bind DataTable to DataGridView
dataGridView1.DataSource = dataTable;
// Dispose resources
wb.Dispose();
}
}
}
Résultat:

Lire les données Excel dans une base de données
L'intégration des données Excel avec une base de données peut rationaliser la gestion des données. Ci-dessous, nous allons parcourir le processus de lecture d'un fichier Excel et d'importation de son contenu dans une base de données MySQL. Cette méthode est idéale pour automatiser la migration de données, la création de rapports ou la synchronisation des données Excel avec une base de données structurée.
Étape 1. Installer la bibliothèque de données MySQL
Pour interagir avec les bases de données MySQL dans vos applications .NET, vous devrez installer la bibliothèque MySql.Data. Ce paquet NuGet fournit les classes et méthodes nécessaires pour se connecter et manipuler les bases de données MySQL.
- C#
Install-Package MySql.Data
Étape 2. Importer les espaces de noms nécessaires
Avant de travailler avec des fichiers Excel et MySQL, vous devez inclure les espaces de noms requis. Spire.XLS est utilisé pour les opérations Excel, tandis que MySql.Data.MySqlClient permet la connectivité à la base de données MySQL.
- C#
using Spire.Xls;
using MySql.Data.MySqlClient;
Étape 3. Extraire les en-têtes et les données d'Excel
L'extrait de code suivant montre comment extraire les en-têtes et les données du fichier Excel. Les en-têtes sont nettoyés pour éviter les conflits de nommage des colonnes MySQL, tandis que les données sont stockées dans un format structuré pour une insertion ultérieure.
- C#
// Create a Workbook object
Workbook wb = new Workbook();
// Load an Excel document
wb.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.xlsx");
// Get a specific sheet
Worksheet sheet = wb.Worksheets[0];
// Retrieve headers
List<string> headers = new List<string>();
for (int col = 1; col <= sheet.LastColumn; col++)
{
string header = sheet.Range[1, col].Value?.ToString();
// Removing spaces to avoid conflicts with MySQL column names
string cleanHeader = header?.Replace(" ", "");
headers.Add($"`{cleanHeader}`");
}
// Retrieve data
List<List<string>> data = new List<List<string>>();
for (int row = 2; row <= sheet.LastRow; row++) {
List<string> record = new List<string>();
for (int col = 1; col <= sheet.LastColumn; col++)
{
record.Add(sheet.Range[row, col].Value?.ToString() ?? string.Empty);
}
data.Add(record);
}
Étape 4. Se connecter à une base de données MySQL
Une connexion à la base de données MySQL est établie à l'aide d'une chaîne de connexion, qui inclut les détails du serveur, les informations d'identification et le nom de la base de données cible. L'instruction using garantit une élimination correcte des ressources.
- C#
string connectionString = "server=localhost;user=root;password=yourpassword;database=yourdatabase;";
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
connection.Open();
// Connection is established; perform database operations here
}
Étape 5. Créer dynamiquement une table dans MySQL
Cette étape génère dynamiquement une table MySQL avec des colonnes correspondant aux en-têtes Excel. Pour plus de simplicité, toutes les colonnes sont définies comme VARCHAR(255), mais les types de données peuvent être ajustés en fonction des besoins.
- C#
// Create a table with dynamic columns based on headers
List<string> columns = new List<string>();
foreach (string header in headers)
{
// Assuming all header values are VARCHAR for simplicity; adjust types as needed
columns.Add($"{header} VARCHAR(255)");
}
// Create a table in database
string columnsSql = string.Join(", ", columns);
string createTableQuery = $ @"
CREATE TABLE IF NOT EXISTS my_table (
id INT AUTO_INCREMENT PRIMARY KEY,
{columnsSql}
)";
// Execute the create table query
using (MySqlCommand createCommand = new MySqlCommand(createTableQuery, connection))
{
createCommand.ExecuteNonQuery();
}
Étape 6. Remplir la table avec des données
Les données Excel extraites sont insérées dans la table MySQL à l'aide de requêtes paramétrées pour empêcher l'injection SQL. Chaque ligne du fichier Excel est mappée à un enregistrement de base de données correspondant.
- C#
// Prepare the SQL INSERT statement
string placeholders = string.Join(", ", new string[headers.Count].Select(h => "?"));
string insertQuery = $"INSERT INTO my_table ({string.Join(", ", headers.Select(h => h.Trim('`')))}) VALUES ({placeholders})";
// Insert data into the table
foreach (List<string> record in data)
{
using (MySqlCommand insertCommand = new MySqlCommand(insertQuery, connection))
{
for (int i = 0; i < record.Count; i++)
{
insertCommand.Parameters.AddWithValue($" @2024\本地文件打包__20180302\Spire.Web\trunk\src\website\components\com_virtuemart\themes\default\templates\browse\includes\browse_searchparameter_form.tpl.php{i}", record[i]);
}
insertCommand.ExecuteNonQuery();
}
}
Voici le code complet pour importer des données d'un fichier Excel dans une table MySQL :
- C#
using Spire.Xls;
using MySql.Data.MySqlClient;
namespace ExcelToMySQL
{
class Program
{
static void Main(string[] args)
{
// Create a Workbook object
Workbook wb = new Workbook();
// Load an Excel document
wb.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.xlsx");
// Get a specific sheet
Worksheet sheet = wb.Worksheets[0];
// Retrieve headers
List<string> headers = new List<string>();
for (int col = 1; col <= sheet.LastColumn; col++)
{
string header = sheet.Range[1, col].Value?.ToString();
// Removing spaces to avoid conflicts with MySQL column names
string cleanHeader = header?.Replace(" ", "");
headers.Add($"`{cleanHeader}`");
}
// Retrieve data
List<List<string>> data = new List<List<string>>();
for (int row = 2; row <= sheet.LastRow; row++)
{
List<string> record = new List<string>();
for (int col = 1; col <= sheet.LastColumn; col++)
{
record.Add(sheet.Range[row, col].Value?.ToString() ?? string.Empty);
}
data.Add(record);
}
// Establish a connection to the MySQL database
string connectionString = "server=localhost;user=root;password=admin;database=excel_db;";
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
connection.Open();
// Create a table with dynamic columns based on headers
List<string> columns = new List<string>();
foreach (string header in headers)
{
// Assuming all header values are VARCHAR for simplicity; adjust types as needed
columns.Add($"{header} VARCHAR(255)");
}
// Create a table in database
string columnsSql = string.Join(", ", columns);
string createTableQuery = $ @"
CREATE TABLE IF NOT EXISTS my_table (
id INT AUTO_INCREMENT PRIMARY KEY,
{columnsSql}
)";
// Execute the create table query
using (MySqlCommand createCommand = new MySqlCommand(createTableQuery, connection))
{
createCommand.ExecuteNonQuery();
}
// Prepare the SQL INSERT statement
string placeholders = string.Join(", ", new string[headers.Count].Select(h => "?"));
string insertQuery = $"INSERT INTO my_table ({string.Join(", ", headers.Select(h => h.Trim('`')))}) VALUES ({placeholders})";
// Insert data into the table
foreach (List<string> record in data)
{
using (MySqlCommand insertCommand = new MySqlCommand(insertQuery, connection))
{
for (int i = 0; i < record.Count; i++)
{
insertCommand.Parameters.AddWithValue($" @2024\本地文件打包__20180302\Spire.Web\trunk\src\website\components\com_virtuemart\themes\default\templates\browse\includes\browse_searchparameter_form.tpl.php{i}", record[i]);
}
insertCommand.ExecuteNonQuery();
}
}
}
Console.WriteLine("Données exportées avec succès !");
}
}
}
Résultat:

Conclusion
La lecture de fichiers Excel en C# n'a jamais été aussi simple, grâce à des bibliothèques comme Spire.XLS. Ce guide vous a expliqué le processus de chargement de fichiers Excel, de lecture de leur contenu et même d'importation des données dans une base de données MySQL. Avec ces techniques, vous pouvez améliorer considérablement les capacités de gestion des données de vos applications.
FAQ
Q1 : Puis-je lire des fichiers Excel protégés par mot de passe ?
R : Oui, Spire.XLS prend en charge la lecture de fichiers Excel cryptés en utilisant :
- C#
wb.OpenPassword = "psd";
wb.LoadFromFile("file.xlsx");
Q2 : Comment puis-je lire les résultats des formules au lieu de la formule elle-même ?
R : Vous avez deux options pour récupérer les résultats des formules :
Pour les cellules individuelles :
Vérifiez si une cellule contient une formule à l'aide de CellRange.HasFormula, et obtenez la valeur avec CellRange.FormulaValue :
- C#
CellRange cell = sheet.Range[1, 1];
if (cell.HasFormula)
{
string result = cell.FormulaValue.ToString();
}
Pour l'exportation en masse vers DataTable :
Utilisez Worksheet.ExportDataTable() avec computedFormulaValue: true pour exporter les valeurs calculées :
- C#
DataTable data = sheet.ExportDataTable(range, exportColumnNames: true, computedFormulaValue: true);
Q3 : Comment puis-je lire les données Excel dans un DataTable ?
R : Utilisez la méthode Worksheet.ExportDataTable() fournie par Spire.XLS.
Q4 : Comment puis-je lire un fichier Excel ligne par ligne ?
R : Référez-vous au code suivant :
- C#
Workbook workbook = new Workbook();
workbook.LoadFromFile("input.xlsx");
Worksheet sheet = workbook.Worksheets[0];
for (int row = 1; row <= sheet.LastRow; row++)
{
for (int col = 1; col <= sheet.LastColumn; col++)
{
string cellValue = sheet.Range[row, col].Value?.ToString() ?? string.Empty;
Console.WriteLine(cellValue);
}
}
Obtenez une licence gratuite
Pour profiter pleinement des capacités de Spire.XLS pour .NET sans aucune limitation d'évaluation, vous pouvez demander une licence d'essai gratuite de 30 jours.