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 :

Détecter si Excel est installé [FAQ]


Sujet :

C++Builder

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Détecter si Excel est installé
    Bonjour à tous,

    Je suis pas très bon en C++ mais je me débrouille..

    Ceci dit la je bloque. On a fait un programme qui utilise le pilotage Ole d'Excel et en fait on se bouffe une exception si Excel n'est pas installé..

    Ma question est donc la suivante: comment chopper cette exception pour afficher un ShowMessage qui dise que l'installation de MS Excel est indispensable?

    Merci pour votre aide

    Thomas

  2. #2
    Membre expérimenté
    Avatar de bakaneko
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 268
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 268
    Points : 1 427
    Points
    1 427
    Par défaut
    et si tu fais un try catch sur l'ouverture de la session excel, ça ne marche pas???

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Variant vMSExcel;
     
    try
    {
     vMSExcel = Variant::CreateObject("Excel.Application");
     vMSExcel.OlePropertySet("Visible", true);
    }
    catch(...)
    {
     //message d'erreur
    }
    + + +

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Hum pour l'instant j'ai ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    try {
        V = GetActiveOleObject("Excel.Application");
    } catch(...) {
        V = CreateOleObject("Excel.Application");
    }
     
    V.OlePropertySet("Visible", false);
    je peux rajouter une condition dans mon try catch alors? je vais essayer de chercher si je n'ai pas de réponse, merci en tout cas

  4. #4
    Membre expérimenté
    Avatar de bakaneko
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 268
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 268
    Points : 1 427
    Points
    1 427
    Par défaut
    Citation Envoyé par zbouby
    Hum pour l'instant j'ai ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    try {
        V = GetActiveOleObject("Excel.Application");
    } catch(...) {
        V = CreateOleObject("Excel.Application");
    }
     
    V.OlePropertySet("Visible", false);
    je peux rajouter une condition dans mon try catch alors? je vais essayer de chercher si je n'ai pas de réponse, merci en tout cas
    Je ne suis pas une spécialiste d'Excel via OLE mais le code suivant (qui doit provenir de ce tuto sert à récupérer un instance existante d'Excel si ton instance n'existe pas, je ne sais pas comment tu peux essayer de l'activer...

    J'ai testé le code que je t'ai donné et chez moi, ça passe bien dans le catch (Je tourne avec OpenOffice, pas Office)
    + + +

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Ok merci beaucoup pour ton aide..

    C'est vrai j'ai trouvé le code que j'utilise sur le tuto mais en l'occurence il me sert à ne pas créer un nouvel objet Excel a chaque fois.

    Moi il me faudrait vraiment un code comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    try {                                                
        V = GetActiveOleObject("Excel.Application");
    }
    catch(EOleSysError){
        V = CreateOleObject("Excel.Application");
    }
    catch(...) {
        ShowMessage("Vous devez avoir installé Microsoft Excel pour utiliser ce logiciel");
    }
    Sauf que la syntaxe du catch(EOleSysError) n'est pas la bonne et que j'y comprends rien, lol..

    merci encore en tout cas!!

  6. #6
    Membre actif
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Points : 279
    Points
    279
    Par défaut
    Cette syntaxe n'est pas bonne, essaye plutot

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    try{
         V = GetActiveOleObject("Excel.Application");
    }catch(EOleSysError &e1){
     
       try{
           V = CreateOleObject("Excel.Application");
       }catch(EOleSysError &e2){
           ShowMessage("Installer Excel avant de continuer");
           Application->Terminate();
       }
     
    }

  7. #7
    Futur Membre du Club
    Inscrit en
    Mars 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup, j'avance à pas de géants grâce à vous, et merci surtout pour la solution djob!!

    Ce qui est fou, c'est que le fait de rajouter le code de djob a fait qu'il manquait désormais des dll pour executer le programme sous Win98SE..

    -> stlpmt45.dll et cc3260mt.dll

    Ces dll sont assez lourdes mais je vais devoir les rajouter à mon installer.

    Par ailleurs, cette méthode est bien mais est-on obligé de fermer le programme du coup? J'ai essayé d'enlever le Application->Terminate mais du coup il me marque "Abnormal program termination".

    C'est vrai que le top pour moi aurait été de pouvoir dire "vous en pouvez pas utiliser cette section si vous n'avez pas excel" et de renvoyer les utilisateurs ailleurs, plutôt que de fermer le programme..

    j'ai essayé de faire un try catch supplémentaire mais j'ai toujours ce "Abnormal program termination"...

    Voici mon dernier 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
    try{                                                    
           V = GetActiveOleObject("Excel.Application");
    }catch(EOleSysError &e1){
       try{
           V = CreateOleObject("Excel.Application");
       }catch(EOleSysError &e2){
           try{
              ShowMessage("Vous devez installer Microsoft Excel pour effectuer des commandes avec le logiciel");
              Form1->Notebook1->PageIndex = 0;
              //Application->Terminate();
           }
           catch(...){
              Application->Terminate();
           }
       }
    }
    merci beaucoup en tout cas pour votre aide

  8. #8
    Membre actif
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Points : 279
    Points
    279
    Par défaut
    pourrais tu nous donner une vue d'ensemble plus large, c'est à dire
    ou ton code est utilisé , que se passe t'il après,car j'ai l'intuition que ton erreur "Abnormal termination..." provient de la suite de ton code....

    Pour ce qui est de ne pas fermer l'application,tu peux transfomer le bout de code que je t'ai donné par exemple dans une fonction pour tester si Excel est présent.


    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
     
    bool __fastcall TForm1::TesterExcel(){
     
     
       try{
             V = GetActiveOleObject("Excel.Application");
       }catch(EOleSysError &e1){
     
           try{
                 V = CreateOleObject("Excel.Application");
           }catch(EOleSysError &e2){
               return false; //Excel n'est pas installé
           }
           return true;
       } 
       return true;
    }
    utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void __fastcall TForm1::FormCreate(TObject * Sender){
        if(!TesterExcel()) {            // si excel n'est pas présent
             DisableSectionExcel();   // désactivation de ta section excel....
             ShowMessage("Excel n'ayant pas été détecté l'export vers excel à été désactivé.")
       } 
     
    }

  9. #9
    Futur Membre du Club
    Inscrit en
    Mars 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    j'ai trouvé tout seul juste avant de lire ta réponse..

    et c'était en effet la suite de mon code.

    J'ai donc grâce à toi résolu mon problème, et je t'en suis ULTRA reconnaissant !!

    Merci beaucoup donc et a bientot

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

Discussions similaires

  1. Comment vérifier si Excel est installé ?
    Par mathieutlse dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 16/08/2017, 18h49
  2. [Innosetup] détecter si PHP est installé sur Windows
    Par max-mag dans le forum Langage
    Réponses: 8
    Dernier message: 10/07/2012, 10h58
  3. [Toutes versions] Vérifier qu'Excel est installé sur le poste
    Par titi95 dans le forum VBA Access
    Réponses: 7
    Dernier message: 12/05/2012, 21h24
  4. Detecter si Excel est installé
    Par mosquitout dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 08/05/2007, 18h22
  5. Détecter si IE7 est installé
    Par ired dans le forum Delphi
    Réponses: 4
    Dernier message: 15/12/2006, 14h05

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