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: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...
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
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.
Partager