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 :

fichier csv et pilotage OLE [Non suivi]


Sujet :

C++Builder

Vue hybride

mike600river fichier csv et pilotage OLE 01/06/2006, 10h40
ksly Bonjour, Je me suis... 01/06/2006, 12h00
mike600river nickel, ca marche. :D en... 01/06/2006, 12h32
blondelle dans la FAQ auteur : Ricky81... 01/06/2006, 12h39
mike600river G pas assez expliqué ni... 01/06/2006, 13h57
ksly :ccool: J'ai... 01/06/2006, 13h48
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 188
    Par défaut fichier csv et pilotage OLE
    bonjour,
    J'ai un fichier cvs a ouvrir pour y reprendre des informations
    en m'appuyant sur la faq et le tutoriel:
    http://lfe.developpez.com/Excel
    J'ai ce petit bout de 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
    void __fastcall TForm_menu::ImporterdesdonnesdORCAD1Click(TObject *Sender)
    {
     OpenDialog1->Execute();
     
      Variant vMSExcel , vFileName, vNotUsed, vSeparator, vXLWorkbooks, vXLWorkbook ;
     
      vMSExcel = Variant::CreateObject("Excel.Application");
      vMSExcel.OlePropertySet("Visible", true);
     
      vFileName = "c:\\Documents and Settings\\stage\\Mes documents\\BOMCVSTESTCPP.csv";
      vNotUsed = Unassigned;
      vSeparator = 4;
      vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");
      ShowMessage(vFileName);
      vXLWorkbook = vXLWorkbooks.OleFunction("Open", vFileName, vNotUsed, vNotUsed,vSeparator);
    }
    Avec ca, je parviens a ouvrir excel mais quand le fichier csv devrai etre ouvert j'ai une erreur "Une exception s'est produite"
    Et meme en essayant avec un autre csv, meme erreur.
    Qu'est ce que j'ai mal fait?

    merci de votre aide.

  2. #2
    Membre averti

    Inscrit en
    Janvier 2003
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 38
    Par défaut
    Bonjour,

    Je me suis confronté à la même erreur.

    Le problème vient peut-être du séparateur ? J'utilise le point-virgule dans mon fichier CSV et je n'ai pas trouvé de doc me permettant de savoir à quoi correspond le vSeparator = 4;.

    Essayez simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    String FileName("c:\\Documents and Settings\\stage\\Mes documents\\BOMCVSTESTCPP.csv");
    Variant vMSExcel=Variant::CreateObject("Excel.Application");
    vMSExcel.OlePropertySet("Visible", true);
     
    Variant vXLWorkbooks=vMSExcel.OlePropertyGet("Workbooks");
    Variant vXLWorkbook=vXLWorkbooks.OleFunction("Open", FileName.c_str());
    Chez moi ce code fonctionne parfaitement.

    Cordialement,
    Sylvain

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 188
    Par défaut
    nickel, ca marche.

    en fait le (un) pb avait l'air de venir du vFileName definit comme Variant et en le mettant en string puis lui appliquant .c_str() comme tu m'as indiqué, plus de pb.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     OpenDialog1->Execute();
     
      Variant vMSExcel , vNotUsed, vSeparator, vXLWorkbooks, vXLWorkbook ;
      String vFileName;
     
      vMSExcel = Variant::CreateObject("Excel.Application");
      vMSExcel.OlePropertySet("Visible", true);
     
      vFileName = fichier_ouvrir;    //nom du fichier select ds opendialog
      vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");
      vXLWorkbook = vXLWorkbooks.OleFunction("Open", vFileName.c_str());
    Peux tu me dire ce que ca change d utiliser vFileName ainsi plutot que comme je l'avais fait, car je vois pas trop pourquoi ca a été necessaire?

    J'abuse un peu: sais tu lancer une macro excel depuis bcb?

    Merci bcp Sylvain

  4. #4
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    dans la FAQ
    auteur : Ricky81
    Considérons l'instance d'Excel représentée par le Variant vMSExcel.


    vMSExcel.OleProcedure("Run", "monClasseur.xls!MaMacro");
    Le code ci-dessus va donc lancer la macro "MaMacro" définie dans le classeur ouvert nommé "monClasseur".


    Remarques :


    Les éventuels paramètres de la macro sont à ajouter comme paramètres à la suite du nom de la macro dans l'appel précédent
    Il vous est bien sûr possible d'appeler une macro définie dans une module en adaptant votre code ("monClasseur.xls!monmodule.MaMacro")

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 188
    Par défaut
    G pas assez expliqué ni détaillé ce que je veux faire, dsl.

    en fait il y aura n fichiers cvs dans lesquels on a un en tete et une liste, je veux donc appliquer une macro0 qui vire la 1ere ligne pour qu'il me reste plus que les listes brutes.
    du coup j'ai ma macro dans un classeur independant.
    comment dire au programme applique a fichier1.cvs la macro0 du classeur0?

    ou ya t il plus simple du style apres avoir ouvert le .cvs , une commande
    DeleteLigne(i) de la feuille excel?

    Merci a tous les deux

  6. #6
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Si j'ai bien compris tu veux supprimer une ligne dans un feuille excel par macro excel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub Macro1()
    '
    ' Macro1 Macro
    ' Macro enregistrée le 01/06/2006 par blondelle
    '
     
    '
        Rows("1:1").Select
        Selection.Delete Shift:=xlUp
        Range("A1").Select
    End Sub
    si tu veux le faire dans plusieurs feuilles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub Macro2()
    '
    ' Macro2 Macro
    ' Macro enregistrée le 01/06/2006 par blondelle
    '
     
    '
        Sheets(Array("Feuil1", "Feuil2", "Feuil3")).Select
        Sheets("Feuil1").Activate
        Rows("1:1").Select
        Selection.Delete Shift:=xlUp
        Range("A1").Select
    End Sub
    ses fonction peuvent s'appeler avec la fonction de la FAQ
    si tu veux ecrire tes propres macro excel
    sous excel tu fait affichage -> barre d'outils ->visual basic
    une petite barre d'outils s'affiche
    tu a un bouton ou rond ou carre suivant ta version excel tu appuie dessus et tout ce que tu va faire dans ta ou tes feuilles va s'enregistrer pour arreter l'enrgeistrement tu reappuie sur le bouton

  7. #7
    Membre averti

    Inscrit en
    Janvier 2003
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 38
    Par défaut
    Citation Envoyé par mike600river
    nickel, ca marche.


    Citation Envoyé par mike600river
    Peux tu me dire ce que ca change d utiliser vFileName ainsi plutot que comme je l'avais fait, car je vois pas trop pourquoi ca a été necessaire?
    J'ai l'impression que le type Variant avec une String/AnsiString n'est pas du gout de la fonction OLE. Par contre le char * fonctionne. Il y a donc un problème de type mais je ne saurai expliquer lequel... Peut-être qu'un expert pourra nous éclairer ?

    Citation Envoyé par mike600river
    J'abuse un peu: sais tu lancer une macro excel depuis bcb?
    Je crois que blondelle a déjà répondu

    Citation Envoyé par mike600river
    Merci bcp Sylvain
    De rien

    @+
    Sylvain

Discussions similaires

  1. Pilotage excel et fichier CSV
    Par Traxsilver dans le forum C++Builder
    Réponses: 13
    Dernier message: 16/07/2013, 12h18
  2. [OLE][Excel] Charger un fichier csv
    Par bandit boy dans le forum C++Builder
    Réponses: 17
    Dernier message: 29/05/2006, 08h43
  3. Mise à jour d'une table avec un fichier csv
    Par blackangel dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 26/05/2005, 14h46
  4. Sortir un fichier csv sur base d une requete
    Par Freeman_80 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 12/01/2005, 11h21
  5. Réponses: 2
    Dernier message: 14/05/2004, 12h55

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