Lire des fichiers Excel en C# sans installer Excel

2024-01-25 07:08:56 Jack Du
AI Summarize:
ChatGPT
ChatGPT ✓
Claude ✓
Grok ✓
Perplexity ✓
Quick
Quick
Concise overview
Highlights
Key takeaways
Detailed
Structured explanation
Brief
One sentence summary
Summarize |

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 la valeur de la cellule Excel A1 en C# avec Free Spire.XLS — sortie console

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 ligne par ligne en C# avec Free Spire.XLS — sortie console

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.AllocatedRange renvoie 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 du DataTable. Lorsqu'il vaut false, 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 vaut false, 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#.

Exporter des données Excel vers un DataTable et les afficher dans un DataGridView — C# Free Spire.XLS

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.

Lire les résultats de formules Excel en C# avec Free Spire.XLS — sortie console

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.

Voir aussi