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, pointer vers le classeur ouvert


Sujet :

C++Builder

  1. #1
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut OLE Excel, pointer vers le classeur ouvert
    Bonjour,

    Décidement, je suis un vrai blaireau avec ce genre de choses et je n'arrive a rien avec OLE Excel:

    J'ai besoin de 'pointer' vers un classeur Excel ouvert, dont je récupère le nom grace a la fonction API GetWindowText (je passe les détails).
    J'ai donc trouvé dans la FAQ:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //pour l'instance d'excel
    vMSExcel = Variant::GetActiveObject("Excel.Application");
    //pour les classeurs ouverts
    vXLWorkbooks = vMSExcel.OlePropertyGet("WorkBooks");
    Mais comment fais je pour pointer vers celui dont je peut trouver le nom via GetWindowText ?
    De plus, j'ai besoin ensuite de pointer vers la feuille active de manière 'générique', puis je espérer faire quelquechose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    vXLWorkSheet = vXLWorkbook.OlePropertyGet("ActiveSheet");
    ?

    Merci d'avance,

  2. #2
    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
    Salut Sunchaser:
    Alors je vais jouer le Mec qui en ajoute une couche mais c'est tres facile
    Je te passe le code pour ouvrir un fichier Excel, le sauvegarder, quitter
    Declarer un public " Variant vMSExcel, vFileName, vXLWorkbooks, vXLWorkbook, vWorksheet; "
    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
     
    // ne pas oublier d'inclure " #include <utilcls.h> "
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    try
     {
        vMSExcel = Variant::GetActiveObject("Excel.Application");
    }
     catch(...)
     {
        vMSExcel = Variant::CreateObject("Excel.Application");
    }
    vMSExcel.OlePropertySet("Visible", true);
    vFileName = "C:\\Documents and Settings\\blondelle\\Mes documents\\Nouveau dossier\\path1\\path1.csv";
    vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");
    vXLWorkbook = vXLWorkbooks.OleFunction("Open", vFileName);
    // ici le fichier path1.csv est charge
    vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets", 1);
    // ici on a le fichier charge dans Excel et la Feuill1 est active
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    vMSExcel.OleFunction("Quit");
    vMSExcel = Unassigned;        
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
    vFileName = "File.xls";
    vXLWorkbook.OleProcedure("Saveas", vFileName);        
    }
    //---------------------------------------------------------------------------
    Facile non

  3. #3
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonsoir,

    Merci Blondelle, et je vais jouer au type qui en rajoute une couche moi aussi:
    "Heu...je vois po comment ca va m'aider ca..."

    En fait, pour résumer, imagines que:
    . je n'ai pas le moyen de savoir combien de classeurs Excel sont ouvert
    . je veux 'pointer' vers un classeur dont je ne connais pas le nom (et qui peut s'appeller comme il veut celui la, je m'en fou) mais je sais qu'il vient d'être selectionné avec la souris, et je peut obtenir tout un tas d'info dessus grâce aux API (en commencant par WindowFromPoint(), GetWindowText, etc).
    Malgré la 'toute puissance' (en général) des API, j'ai besoin de passer par OLE Excel puisque je veux acceder a l'objet 'Cell'.

    Donc dans mon cas, je ne pense pas pouvoir faire un "open" puisque - c'est sur - le fichier est ouvert et aussi je n'ai pas le filename (a priori ...)


    Voili ...

  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
    Je ne comprend pas trop ce que tu veu faire mais si il est selectionne par la souris il apparait a l'ecran, si il est visible.
    Tu voudrais utiliser Ole juste pour intervenir sur le classeur mais pas pour l'ouvrir

  5. #5
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Citation Envoyé par blondelle
    Je ne comprend pas trop ce que tu veu faire
    moi non plus ... lol

    Tu voudrais utiliser Ole juste pour intervenir sur le classeur mais pas pour l'ouvrir
    Voui ... tout a fait.
    Mais je te promets que si j'y arrive, tu comprendras très vite en fait ce que je cherchais a faire, et pis ... non seulement je te remercierais mille fois, mais en plus je saturerais les MP des forumeurs avec des éloges te concernant !

  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
    Pour to probleme il serait interressant de savoir ce que passe " vMSExcel " dans les fonctions du try catch
    vMSExcel = Variant::GetActiveObject("Excel.Application");

    vMSExcel = Variant::CreateObject("Excel.Application");
    J'ai fais quelques essais mais je ne suis pas parvenu a recupere la valeur d'un Variant.
    L'idee c'est de recupere l'instance du fichier ouvert par l'api et de le passer dans " vMSExcel "
    Si besoin est je sais recupere le Handle d'une fenetre

  7. #7
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Désolé Blondelle,

    Tu as affaire a un immonde ignare, je viens de trouver ce que je cherchais et il fallait juste que j'observe un peu mieux l'enchevêtrement des objets d'Excel.

    En fait, ce bout de code me suffit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Variant vMSExcel, vXLWorkbooks, vXLWorkbook, vXLWorkSheet, vRange, vValue;
    vMSExcel = Variant::GetActiveObject("Excel.Application");
    vXLWorkbooks = vMSExcel.OlePropertyGet("WorkBooks");
    vXLWorkbook = vMSExcel.OlePropertyGet("ActiveWorkBook");
    vXLWorkSheet = vXLWorkbook.OlePropertyGet("ActiveSheet");
    vRange = vXLWorkSheet.OlePropertyGet("Range", Index);
    vValue = vRange.OlePropertyGet("Value");
    StaticText1->Caption = vValue;
    C'etait pas si compliqué que cela ...

    Merci de t'être penché sur mon problème,
    @ +

  8. #8
    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
    Pas de probleme
    Je l'avais dit c'est tres simple

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

Discussions similaires

  1. Extraire une feuille d'un classeur fermé vers un classeur ouvert
    Par Kutoh dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 01/08/2013, 11h23
  2. Copier des données de classeurs Excel fermés vers un classeur ouvert
    Par gwen-al dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 11/03/2008, 17h00
  3. Exportation requête vers Excel dans un classeur ouvert
    Par sophiesallee dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 03/09/2007, 14h54
  4. lien vers un classeur excel
    Par maketossss dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 20/01/2006, 11h46
  5. [Excel] Commentavoir si un classeur est déjà ouvert ?
    Par Henkyl dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 14/05/2004, 11h27

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