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++Builder Discussion :

[OLE][Excel] Charger un fichier csv


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut [OLE][Excel] Charger un fichier csv
    Bonjour,
    Je souhaite charger un fichier csv à partir de mon application. En me basant sur les tutoriaux et les explications de Ricky81, j'ai fais le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    vMSExcel = Variant::CreateObject("Excel.Application");
    vMSExcel.OlePropertySet("Visible", true);
    vFileName = GetCurrentDir()+"Data\\"+nom_fichier+".csv"; //nom complet de l'emplacement
    vNotUsed = Unassigned;
    vSeparator = 4; //séparation par des ';'
    vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");
    vXLWorkbook = vXLWorkbooks.OleFunction("Open", vFileName, vNotUsed, vNotUsed, vSeparator);
    Je me retrouve avec une erreur "Type de variable incorrecte" lors de l'éxécution de ce code.
    Je ne vois pas d'où viens l'erreur ni quel est la variable incorrecte.
    Si quelqun vois le soucis, je suis tout ouïe.
    Merci d'avance

  2. #2
    Membre expérimenté
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Par défaut
    je pense que c'est ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vFileName = GetCurrentDir()+"Data\\"+nom_fichier+".csv"; //nom complet de l'emplacement
    il faut d'abord convertir tout AnsiString ou String en chaine de caratere unicode (wchar_t*)
    pour cela on utilise habituellement la fonction StringToOleStr(...)

  3. #3
    Membre chevronné Avatar de niglo
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 379
    Par défaut
    Citation Envoyé par Djob
    il faut d'abord convertir tout AnsiString ou String en chaine de caratere unicode (wchar_t*) pour cela on utilise habituellement la fonction StringToOleStr(...)
    Ou alors tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WideString = "monAnsiString";
    et tu auras un wchar_t* (enfin dans mes souvenirs)

  4. #4
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Tout d'abord merci de m'avoir répondu.
    J'ai essayé ces deux lignes suivantes mais aucune n'a d'effet bénéfique.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        chemin = GetCurrentDir()+"Data\\"+nom_fichier+".csv";
        vFileName = WideString (chemin); //nom complet de l'emplacement
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        chemin = GetCurrentDir()+"Data\\"+nom_fichier+".csv";
        vFileName = StringToOleStr(chemin); //nom complet de l'emplacement
    En effet je n'ai plus la même erreur, maintenant j'ai "une exception s'est produite".
    Lorsque je regarde dans le "sysvari.h" l'éxécution de la fonction appelée par OleFunction la variable arg possède une valeur à {????} alors que tous les paramètres sont renseignés.

  5. #5
    Membre chevronné


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 855
    Par défaut
    Bonsoir,

    j'ai reproduit ton problème. Il s'agit à priori du fichier qui n'existe pas.
    En tout cas j'ai fais un test avec une adresse de fichier existant (ca passe) et un autre avec une mauvaise adresse (ca donne ton erreur).

    Bon courage

    Eric

  6. #6
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    En effet, j'avais un soucis de ce côté là , mais ce qui m'inquiète c'est que même ce point corrigé, je n'arrive toujours pas à ouvrir excel.
    Il se produit la même erreur. :

  7. #7
    Membre chevronné


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 855
    Par défaut
    Bonjour,

    peux tu mettre ton code "complet" (enfin on se comprend j'espère) ?

    Eric

  8. #8
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Salut,
    Voilà mon code :
    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
     
        static bool excel;
    /*
        try
        {
            vMSExcel = Variant::GetActiveObject("Excel.Application");
        }
        catch(...)
        {
            vMSExcel = Variant::CreateObject("Excel.Application");
        }
    */
        if(!excel)
        {
            vMSExcel = Variant::CreateObject("Excel.Application");
            vMSExcel.OlePropertySet("Visible", true);
            excel = true;
        }
        else
        {
            vMSExcel = Variant::GetActiveObject("Excel.Application");
            vMSExcel.OlePropertySet("Visible", true);
        }
    /*    
        vFileName = "Data\\"+nom_fichier+".csv";
        vLink = Unassigned;
        vReadOnly = true;
        vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");
        vXLWorkbook = vXLWorkbooks.OleFunction("Open", vFileName, vLink, vReadOnly);
        Variant vFileName, vNotUsed, vSeparator;
    */
    /*
        vFileName = GetCurrentDir()+"Data\\"+nom_fichier+".csv"; //nom complet de l'emplacement
        vNotUsed = Unassigned;
        vSeparator = 4; //séparation par des ';'
        vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");
        vXLWorkbook = vXLWorkbooks.OleFunction("Open", vFileName, vNotUsed, vNotUsed, vSeparator);
    */
        AnsiString chemin;
        chemin = GetCurrentDir()+"Data\\"+nom_fichier+".csv";
     
        vMSExcel.OlePropertySet("SheetsInNewWorkbook", 1); //1 feuille à l'ouverture
    //    vFileName = WideString (chemin); //nom complet de l'emplacement
        vFileName = StringToOleStr(chemin); //nom complet de l'emplacement
        vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");
        vXLWorkbook = vXLWorkbooks.OleFunction("Open", vFileName, Unassigned, Unassigned, 4);
    En commentaire, tu peux voir les méthodes que j'ai essayé qui ne fonctionne pas.
    Je n'ai pas non plus réussi à récupérer l'instance ouverte d'excel, ce qui explique mon booléen me permettant de me faire mon instance et de travailler dessus.

    Si tu vois le problème, je t'acoute car j'aimerais bien comprendre pourquoi cela ne fonctionne pas.
    Merci de t'inquiéter de mon problème

  9. #9
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Vois-tu ce qui ne vas pas Ricky?

  10. #10
    Membre chevronné


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 855
    Par défaut
    Rajoutes un Quelque chose me dit que tu devrais plutôt écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chemin = GetCurrentDir()+"\\Data\\"+nom_fichier+".csv";
    Mais finalement, où se trouve ton fichier ?

    Eric

  11. #11
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Excuse moi pour le retard
    Mon fichier se trouve dans un répertoire "Data" situé lui même dans le répertoire courrant de l'application.
    J'ai modifié et rajouté le "\\" devant Data, et en effet ca ne devait pas arranger les chose, mais le problème est toujours présent.

  12. #12
    Nouveau candidat au Club
    Inscrit en
    Juin 2004
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 2
    Par défaut
    Bonjour,

    J'ai eu le même pb en voulant charger des noms de fichier Excel
    à partir d'un .INI

    Le pb est le passage AnsiString->Variant

    Voici comment je l'ai résolu (pgm simplifié):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     AnsiString FileName2 = "test.xls" ;
    // en réalité c'était chargé à partir du .INI
    AnsiString FileName1 = "C:\\DATA\\" ;
    WideString = FileName = FileName1 + FileName2 ;
     
    Variant VFileName = FileName.c_bstr() ; // il s'agit bien de c_bstr() !!!!
     
    //Et à partir de là tu peux ouvrir avec un classique
     
    vXLWorkbook = vXLWorkbooks.OleFunction("Open",vFileName,vLink)
    // pour moi
    J'espère que ça marchera aussi bien pour toi

    A+

    René

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

Discussions similaires

  1. [PDO] Charger un fichier csv dans une base de données en utilisant PDO
    Par soussou1010 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 10/07/2014, 14h36
  2. charger ligne fichier csv dans tableau C
    Par nhella22 dans le forum Débuter
    Réponses: 6
    Dernier message: 21/04/2011, 20h28
  3. 40 Feuilles dans 1 fichier Excel = Autant de Fichier .CSV
    Par Nissartis dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 25/03/2008, 15h53
  4. Charger un Fichier CSV avec traitement
    Par Iphelias dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 06/08/2007, 13h53
  5. [Excel] séparateur pour les fichiers csv
    Par drinkmilk dans le forum Excel
    Réponses: 2
    Dernier message: 27/08/2005, 14h21

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