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

API, COM et SDKs Delphi Discussion :

[OLE Excel] Erreur


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre du Club
    [OLE Excel] Erreur
    Quand j'essaie de compiler, le compilateur me donne cette erreur :
    ---------------------------
    Notification d'une exception du débogueur
    ---------------------------
    Le projet ImportExcel.exe a provoqué une classe d'exception EOleSysError avec le message 'Opération non disponible'. Processus stoppé. Utilisez Pas-à-pas ou Exécuter pour continuer.
    Et le compilateur s'arrête sur ça :
    try
    OleApplication := GetActiveOleObject('Excel.Application');
    except
    OleApplication := CreateOleObject('Excel.Application');
    end;
    Je sais pas ce que c'est. Qqn a une idée ?
    Merci.

  2. #2
    Membre chevronné
    Si les options du débugger sont paramétrés pour s'arrêter sur les exceptions Delphi, il est tout à fait normal que le débugger stoppe l'exécution du programme.

  3. #3
    Membre du Club
    Oui, mais ça signifie quoi ? Il y a une erreur ? C'est du au code ?

  4. #4
    Membre expérimenté
    Tu peux nous donner le reste du code?
    Parce que là, on pourrait te donner des tas de suppositions, vu le peu que tu nous as fourni.

    Frank

  5. #5
    Membre du Club
    Bah en faite, je sais pas ou se situe l'erreur.
    Le compilateur s'arrête dans cette partie :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TfmImportExcel.FormCreate(Sender: TObject);
    begin
       try
            OleApplication := GetActiveOleObject('Excel.Application');
       except
            OleApplication := CreateOleObject('Excel.Application');
       end;
       OleApplication.visible:=True; // pour rendre Excel visible
    end;


    Alors après, je sais pas quoi vous montrer...

  6. #6
    Membre expérimenté
    Un peu d'aide delphi:
    EOleSysError is the exception class for errors specific to the OLE IDispatch interface.

    Unit

    ComObj

    Description

    EOleSysError is the exception class for errors that occur during an attempt to invoke a method or property of an OLE automation object. When the IDispatch Invoke method fails, EOleSysError is raised. Objects invoked through IDispatch can return the error code—an OLE status code or SCODE—indicating the reason for the error.
    As tu rajouté ComObj dans les uses?
    Et tu déclares bien ton OleApplication comme variant?

    Frank

  7. #7
    Membre chevronné
    Quelques précision:
    Si Excel n'est pas ouvert lors de l'exécution de ton programme, une exception doit être levée sur la ligne:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
      OleApplication := GetActiveOleObject('Excel.Application');

    C'est tout à fait normal car on tente d'obtenir une instance de l'application Excel et celle-ci n'est pas en mémoire. Cette éventualité est traitée dans la section except où l'on demande la création d'une nouvelle instance.
    Ce que je voulais dire dans ma précédente réponse c'est que les options du debugger permettent de lui demander de s'arrêter sur les exceptions générées même si elles sont traitées dans le code. C'est, je pense, ce qui se passe dans ton cas. Pour désactiver cette option (Delphi 7): Menu Outils->Options du débogueur->Exceptions du langage et décocher la case "Stopper sur exceptions".
    PS: je n'ai qu'une version anglaise sous la main, les noms exacts peuvent être un peu différents.

  8. #8
    Membre du Club
    As tu rajouté ComObj dans les uses? OUI
    Et tu déclares bien ton OleApplication comme variant? OUI


    OK merci. Ca marche nickel comme ca !

  9. #9
    Membre expérimenté
    De rien.

  10. #10
    Membre chevronné
    Désolé Pour une fois, c'est moi qui pollue le forum en donnant des réponses inadaptées. La prochaine fois, je lirais la question dix fois avant de répondre.