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

  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 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

  6. #6
    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

  7. #7
    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

  8. #8
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 188
    Par défaut
    la macro c bon, elle est prête depuis un moment, la ou je suis dans le brouillard c'est que j'ai un classeur avec ma macro, et n classeur contenant chacun une feuille a traiter. Dans mon application bcb l'utilisateur choisi un classeur a traiter, il s'ouvre et c'est la que je ne sais pas comment faire pour dire au prog: "prend le classeur_choisi et applique lui la macro Macro_Traitement qui se trouve dans le classeur Classeur_Traitement"

    Je sais pas comment faire un lien entre une feuille d'un classeur A et la macro du classeur Classeur_Traitement

  9. #9
    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 ta macro est dupliquee dans chaque classeur avec le meme nom je pense qu'il n'y a pas de probleme pour l'appeler avec la fonction de la FAQ

  10. #10
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 188
    Par défaut
    les classeurs a traiter sont generés par d'autres utilisateurs, ils ne contiennent pas la macro.
    Tu veux dire qu'il faudrait que pour chaque classeur traité j'ai un bout de code qui copie ma macro vers ce classeur? Parce que si oui ca m a bien traversé l'esprit mais pour le moment je vois pas comment faire ça non plus.

  11. #11
    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
    la je ne vais pas pouvoir t'aider je debute en bcb et j'ai aussi des difficultees il y aura certainement quelqu'un qui pourra t'aider avec les differents elements du post
    bon courage

  12. #12
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 188
    Par défaut
    En tout cas merci pour tes réponses, et d'après ce que j'ai vu, si j'ai un pb avec excel je sais a qui m'adresser

    A bientot blondelle

  13. #13
    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 C++ Builder il y a des choses interressantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Comment récupérer un objet correspondant à la ligne/colonne complète à laquelle appartient un groupe de cellules ? [haut] 
     
    auteur : Superstivix 
    Nous allons travailler sur le Variant vCell correspondant à la cellule.
     
    Variant vCol, vRow;
    vRow = vRange.OlePropertyGet("EntireRow");
    vCol = vRange.OlePropertyGet("EntireColumn");
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Comment savoir si la suppression de lignes ou de colonnes est permise ? [haut] 
     
    auteur : Superstivix 
    Nous allons travailler sur une feuillle, représentée par le Variant vWorksheet.
    Pour accéder à cette information, il faut interroger l'objet Protection de cette feuille :
     
    bool supprLignePermis, supprColonnePermis;
    // vWorksheet est de type Variant
    supprLignePermis = vWorksheet.OlePropertyGet("Protection").OlePropertyGet("AllowDeletingRows");
    supprColonnePermis =  vWorksheet.OlePropertyGet("Protection").OlePropertyGet("AllowDeletingColumns");
    ou
    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
     
    Comment insérer ou supprimer une cellule ? [haut] 
     
    auteur : Ricky81 
    Agissons au niveau du Variant correspondant à un cellule.
     
    Pour insérer :
     
    vCell.OleProcedure("Insert", shift);
    Où shift correspond au décalage à effectuer. Il peut prendre les valeurs de la classe XlInsertShiftDirection :
     
    xlShiftDown = -4121
    xlShiftToRight = -4161
    Pour supprimer :
     
    vCell.OleProcedure("Delete", shift);
    Où shift correspond au décalage à effectuer. Il peut prendre les valeurs de la classe XlDeleteShiftDirection :
     
    xlShiftUp = -4162
    xlShiftToLeft = -4159
    Remarque : ces opérations peuvent bien entendu également être réalisées sur un plage de cellules, et plus particulièrement une colonne ou une ligne.

  14. #14
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 188
    Par défaut
    merci

    je suis en train de bosser avec la methode de suppression d une cellule
    et sur une autre facon de faire qui prend le pb autrement

    je post la reponse des que ya qqchose qui marche

    a+

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