IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[C#] Lecture d'un fichier Excel: problème


Sujet :

C#

  1. #1
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut [C#] Lecture d'un fichier Excel: problème
    Bonsoir,

    J'ai un petit soucis avec un morceau de code pour lire un fichier Excel.

    J'ai une erreur de type :
    The SELECT statement includes a reserved word or an argument name that is misspelled or missing, or the punctuation is incorrect
    Sur le morceau de code suivant en rouge:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     string strCnx = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strCheminFichier + ";Extended Properties=" + (char)34 + "Excel 8.0;HDR=Yes;" + (char)34 + ";";
                DataTable dtRetour = null;
                System.Data.OleDb.OleDbConnection oCnx = new System.Data.OleDb.OleDbConnection(strCnx);
                System.Data.OleDb.OleDbCommand objCmdSelect = null;
                System.Data.OleDb.OleDbDataAdapter objAdapter = null;
                System.Data.DataSet oDs = new DataSet();
    
    // ouvertur de la connexion
                            oCnx.Open();
                            // création de la commande
                            objCmdSelect = new System.Data.OleDb.OleDbCommand("SELECT FROM [" + strNomFeuilleExcel + "$]", oCnx);
                            objAdapter = new System.Data.OleDb.OleDbDataAdapter();
                            // on informe de l'instruction SELECT
                            objAdapter.SelectCommand = objCmdSelect;
                            // on execute la requete en spécifiant le protocole et on remplit le DataSet
                            objAdapter.Fill(oDs, "XLData");
                            // Vérification du dataset
                            if (oDs != null && oDs.Tables != null && oDs.Tables.Count > 0)
                            {
                                dtRetour = oDs.Tables[0];
                            }
                            else
                            {
                                dtRetour = null;
                            }
                            // Libération
                            oCnx.Close();
                            objCmdSelect.Dispose();
                            objAdapter.Dispose();
    Apparement, il n'aime pas trop le string que je lui passe :/ quelqu'un saurait-il pourquoi ?

    Merci bien et bonne soirée,

    L.

  2. #2
    Membre confirmé
    Profil pro
    Directeur développement logiciel
    Inscrit en
    Décembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Directeur développement logiciel

    Informations forums :
    Inscription : Décembre 2009
    Messages : 22
    Par défaut
    Visiblement l'erreur implique le SELECT, et je vois l'instruction suivante dans ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objCmdSelect = new System.Data.OleDb.OleDbCommand("SELECT FROM [" + strNomFeuilleExcel + "$]", oCnx);
    Je suis pas expert de cette commande, mais les requêtes SQL je sais faire et un "SELECT FROM quelquechose" c'est pas bon en SQL. Il faut un "SELECT * FROM quelquechose" à la rigueur ou en précisant le nom des colonnes.

    Peut-être est-ce que ça peut t'aider.

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut
    En effet, c'est une grosse erreur que j'aurais dû voir!

    Merci bien, je pense que ça va régler le problème, je checkerais ça se soir

    On peut mettre ça sur résolu à mon avis

  4. #4
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut
    En faite ça ne marche pas totalement.

    Dans ma procédure ou je charge le fichier excel, je retourne un datatable:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    private DataTable GetfichierFeuilleFichierExcel(string strCheminFichier, string strNomFeuilleExcel)
            {
                // Chaine de connexion
                string strCnx = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strCheminFichier + ";Extended Properties=" + (char)34 + "Excel 8.0;HDR=Yes;" + (char)34 + ";";
                DataTable dtRetour = null;
                System.Data.OleDb.OleDbConnection oCnx = new System.Data.OleDb.OleDbConnection(strCnx);
                System.Data.OleDb.OleDbCommand objCmdSelect = null;
                System.Data.OleDb.OleDbDataAdapter objAdapter = null;
                System.Data.DataSet oDs = new DataSet();
     
                try
                {
                    // vérification globale des données entrantes
                    if (strCheminFichier != string.Empty && strNomFeuilleExcel != string.Empty)
                    {
                        if (System.IO.File.Exists(strCheminFichier))
                        {
                            // ouvertur de la connexion
                            oCnx.Open();
                            // création de la commande
                            objCmdSelect = new System.Data.OleDb.OleDbCommand("SELECT * FROM [" + strNomFeuilleExcel + "$]", oCnx);
                            objAdapter = new System.Data.OleDb.OleDbDataAdapter();
                            // on informe de l'instruction SELECT
                            objAdapter.SelectCommand = objCmdSelect;
                            // on execute la requete en spécifiant le protocole et on remplit le DataSet
                            objAdapter.Fill(oDs, "XLData");
                            // Vérification du dataset
                            if (oDs != null && oDs.Tables != null && oDs.Tables.Count > 0)
                            {
                                dtRetour = oDs.Tables[0];
                            }
                            else
                            {
                                dtRetour = null;
                            }
                            // Libération
                            oCnx.Close();
                            objCmdSelect.Dispose();
                            objAdapter.Dispose();
                        }
                    }
                    return dtRetour;
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.Message);
                    return dtRetour;
                }
            }
    Jusque là, pas de problème.

    Ensuite j'affecte mon DataTable j'affecte à un DataSet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    string filePath = Directory.GetCurrentDirectory().ToString() + @"\" + fileName + ".xls"
                DataTable mytest = GetfichierFeuilleFichierExcel(filePath, "table");
                tablesToSelect.Tables.Add(mytest);
    Et c'est précisémment dans la dernière ligne qu'il plante :/

    Quand je regarde mes valeurs en mode debug, mon dtRetour à une valeur {XLData}. Je ne sais pas si c'est normal, et si c'est ça qui fait planter le programme vu que c'est la première fois que je charge un fichier Excel en C# :/

    Merci bien,

    L.

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut
    En faite j'ai trouvé, dans ma procédure de chargement de fichier excel, il suffit de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dtRetour = oDs.Tables[0].Copy();
    Et là ça marche. Je pense que ça devait être un problème de référence que n'est pas possible d'avoir des references de reference lorsqu'il s'agit d'un type en retour d'une procédure. Si quelqu'un à la réponse à mon interrogation, je veux bien la connaître

    A+,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lecture fichier excel - problème NAN
    Par sebastien06 dans le forum MATLAB
    Réponses: 2
    Dernier message: 12/05/2011, 18h13
  2. Problème de lecture d'un fichier excel
    Par Amelde dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 31/03/2009, 04h23
  3. Réponses: 4
    Dernier message: 31/12/2007, 11h39
  4. [POI] Problème écriture/lecture dans un fichier Excel
    Par steuve dans le forum Documents
    Réponses: 6
    Dernier message: 02/07/2007, 15h47
  5. [VB6] Problème de lecture d'un fichier excel
    Par Requin15 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 23/03/2006, 17h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo