81 votes

Comment lire les données d'un fichier Excel en utilisant c#

Mon application doit lire les données d'un fichier Excel. J'utilise .Net et c# pour le développement. Je ne peux pas installer MS Office sur le système. C'est pourquoi mon application ne parvient pas à lire le fichier Excel et génère une erreur lors du chargement de la dll pour Excel.

Comment puis-je accéder au fichier Excel dans mon application dans un système où ms office n'est pas installé ?

110voto

Steve Points 96477

Il est possible d'utiliser OleDB et utiliser les feuilles Excel comme des tables de données dans une base de données...

Juste un exemple.....

string con =
  @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\temp\test.xls;" + 
  @"Extended Properties='Excel 8.0;HDR=Yes;'";    
using(OleDbConnection connection = new OleDbConnection(con))
{
    connection.Open();
    OleDbCommand command = new OleDbCommand("select * from [Sheet1$]", connection); 
    using(OleDbDataReader dr = command.ExecuteReader())
    {
         while(dr.Read())
         {
             var row1Col0 = dr[0];
             Console.WriteLine(row1Col0);
         }
    }
}

Cet exemple utilise le Microsoft.Jet.OleDb.4.0 pour ouvrir et lire le fichier Excel. Toutefois, si le fichier est de type xlsx (à partir d'Excel 2007), vous devez télécharger le fournisseur d'accès à Internet. Moteur de base de données Microsoft Access et l'installer sur la machine cible.

Le fournisseur est appelé Microsoft.ACE.OLEDB.12.0; . Faites attention au fait qu'il y a deux versions de ce composant, une pour 32bit et une pour 64bit. Choisissez la version appropriée en fonction du débit de votre application et de la version d'Office installée (le cas échéant). Il y a beaucoup de bizarreries pour que ce pilote fonctionne correctement pour votre application. Voir cette question par exemple .

Bien sûr, vous n'avez pas besoin qu'Office soit installé sur la machine cible.

Bien que cette approche ait certains mérites, je pense que vous devriez accorder une attention particulière au lien signalé par un commentaire dans votre question Lecture de fichiers Excel à partir de C# . Il existe quelques problèmes concernant l'interprétation correcte des types de données et lorsque la longueur des données, présentes dans une seule cellule Excel, est supérieure à 255 caractères.

27voto

Obama Points 2476

CSharpJExcel pour la lecture des fichiers Excel 97-2003 (XLS), ExcelPackage pour lire les fichiers Excel 2007/2010 (format Office Open XML, XLSX), et ExcelDataReader qui semble avoir la capacité de gérer les deux formats

Bonne chance !

10voto

Mark Kram Points 1852

Je n'ai pas de machine disponible pour tester cela mais cela devrait fonctionner. Tout d'abord, vous aurez probablement besoin d'installer l'un ou l'autre des éléments suivants Pilote du système Office 2007 : Composants de connectivité des données ou le Microsoft Access Database Engine 2010 Redistribuable . Essayez ensuite le code suivant, notez que vous devrez changer le nom de la feuille dans l'instruction Select ci-dessous pour qu'il corresponde au nom de la feuille dans votre fichier Excel :

using System.Data;
using System.Data.OleDb;

namespace Data_Migration_Process_Creator
{
    class Class1
    {
        private DataTable GetDataTable(string sql, string connectionString)
        {
            DataTable dt = null;

            using (OleDbConnection conn = new OleDbConnection(connectionString))
            {
                conn.Open();
                using (OleDbCommand cmd = new OleDbCommand(sql, conn))
                {
                    using (OleDbDataReader rdr = cmd.ExecuteReader())
                    {
                        dt.Load(rdr);
                        return dt;
                    }
                }
            }
        }

        private void GetExcel()
        {
            string fullPathToExcel = "<Path to Excel file>"; //ie C:\Temp\YourExcel.xls
            string connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0;HDR=yes'", fullPathToExcel);
            DataTable dt = GetDataTable("SELECT * from [SheetName$]", connString);

            foreach (DataRow dr in dt.Rows)
            {
                //Do what you need to do with your data here
            }
        }
    }
}

Note : Je n'ai pas d'environnement pour tester ceci (un avec Office installé) donc je ne peux pas dire si cela fonctionnera dans votre environnement ou non mais je ne vois pas pourquoi cela ne fonctionnerait pas.

9voto

Robert Harvey Points 103562

Enregistrez le fichier Excel au format CSV, et lisez le fichier résultant avec C# en utilisant une bibliothèque de lecture CSV comme FileHelpers .

5voto

petko_stankoski Points 2520

Convertir le fichier excel en .csv fichier ( valeur séparée par des virgules ) et maintenant vous pouvez facilement le lire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X