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 :

Problème de pillotage OLE d'Open office depuis un OCX


Sujet :

C++Builder

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 24
    Points : 9
    Points
    9
    Par défaut Problème de pillotage OLE d'Open office depuis un OCX
    Bonjour,
    Je travaille pour une société qui à réalisé un logiciel qui contient, entre autres, une fonction qui permet d'écrire dans un fichier Excel, pour cela ils ont utilisé le composant TExcelApplication. Cette fonction d'export de donnée vers Excel est écrite dans un OCX.

    La société souhaite que je remplace Excel par Open Office, ce travail étant le sujet de mon stage.

    Ces 2 dernières semaines j'ai donc appris à piloter Open Office par OLE, tout fonctionne parfaitement lorsque le pilotage d'Open office se fait dans un EXE, mais rien ne marche lorsqu'il se fait dans un OCX.

    Pour débuté mes essais sous l'OCX, j'essaie simplement de lancer calc avec ce 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
    17
    18
    Variant vOOoOpenOffice, vOOoDocument, vOOoDesktop, vOOoLoadParams;
    Boolean vOOoDocumentExist;
     
    try
    {
      vOOoOpenOffice = CreateOleObject("com.sun.star.ServiceManager");
    }
    catch (...)
    {
     // si on passe ici c'est qu'il y a une erreur qu'il faudra traiter
    }
    if (VarType(vOOoOpenOffice) == varDispatch)
    vOOoDesktop = vOOoOpenOffice.OleFunction("createInstance", "com.sun.star.frame.Desktop");
    int Bounds[2] = {0,-1};
    vOOoLoadParams = VarArrayCreate(Bounds, 1, varVariant);
    // ici on ouvre un nouveau document vierge calc
    vOOoDocument = vOOoDesktop.OleFunction("LoadComponentFromURL", "private:factory/scalc", "_blank", 0, vOOoLoadParams);
    vOOoDocumentExist = !(VarIsEmpty(vOOoOpenOffice) || VarIsNull(vOOoOpenOffice)); // false
    L'OCX execute la première instruction, puis il plante à la deuxième et m'affiche un message d'erreur de type violation d'accès...

    Lorsqu'il execute la première instruction, l'icône Open office apparait tout de même dans la barre de notification, mais je pense que la création le l'objet OLE ne se fait pas correctement.

    Ma question est donc : est-il possible de créer des objet OLE dans un OCX?
    Et si oui comment?
    C'est peut être la raison pour laquelle les concepteurs de cet OCX n'ont pas utilisé le pilotage OLE pour Excel.

  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
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut Bruiser
    Le code montre est celui de la Faq, et si tu n'a pas oublie d'inclure " #include <ComObj.hpp> " cela doit fonctionner en .EXE, pour pouvoir t'aider c'est le code de ton OCX que tu doit montrer, a mon avis s'il est possible de le faire c'est tes declaration dans cet OCX qui sont a revoir, mais la je ne suis pas un specialiste

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 24
    Points : 9
    Points
    9
    Par défaut
    L'ajout de " #include <ComObj.hpp> " n'a rien changé, d'ailleurs je ne l'avais pas ajouté lors de mes essais dans un exécutable et cella marchait quand même.

    Je n'ai pas mis de code de l'OCX car il est relativement gros et je ne vois pas ce que je pourrai mettre. Je tente de lancer Open Office lors de l'appui sur un bouton situé sur l'une des fenêtres qui compose l'OCX.

    Pour ce qui est des déclaration de l'OCX je n'y connais rien du tout (d'ailleurs je n'y connais pas grand chose en OCX), où puis-je trouver ces déclarations?

    Est ce que les déclarations pourraient être ce qui est dans le fichier .tlb qui contient ceci :



    Edit: Je viens d'essayer d'ouvrir Excel et Internet Explorer avec Ole, avec le code que tu a donné dans un de tes posts et j'ai exactement le même plantage.

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/04/2017, 17h21
  2. Utiliser Open Office depuis Python
    Par rambc dans le forum Général Python
    Réponses: 16
    Dernier message: 08/11/2010, 21h17
  3. Problème d'activation du plugin open office dans NetBeans 671
    Par christian79 dans le forum NetBeans Platform
    Réponses: 1
    Dernier message: 11/10/2009, 01h19
  4. Problème de jar avec l'API Java d'open Office (com.sun.star)
    Par mazizou dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 27/05/2008, 16h13
  5. [OpenOffice] Problème Misa A Jour Open Office
    Par floche88 dans le forum OpenOffice & LibreOffice
    Réponses: 1
    Dernier message: 23/05/2008, 17h41

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