Bonjour à tous,
je suis en train de faire un petit programme et dans la fin de mon programme je dois pouvoir copier les informations que j'ai dans un mémo et les coller dans un tableur Openoffice Calc.
Pour se faire, j'ai suivi la doc:
http://delphi.developpez.com/faq/?page=openoffice
En particulier ceci et ceci:
http://delphi.developpez.com/faq/?pa...engeneconnecte
http://delphi.developpez.com/faq/?pa...lleropenoffice
Malheureusement au moment de compiler j'obtiens des erreurs.
Voici le code du lien numéro 3 que j'ai inséré dans mon code après avoir au préalablement ajouter (comme cela est noté dans le lien 2) :
-ajouter ComObj aux uses
-Déclarer les variables globales openOffice (OpenOffice Document)
-ajouter ceci au code de la Faq(cfr lien 2):
LE copié collez venant de la Faq et modifié:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if VarIsEmpty(OpenOffice) then OpenOffice := CreateOleObject('com.sun.star.ServiceManager');
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73 procedure TForm1.PasteClipBoard; var OOoServer, OOoDesktop, OOoDocument, OOoClip, OOoClipContents, OOoTypes, VariantArr: Variant; I: Integer; AStr: String; begin if VarIsEmpty(OpenOffice) then OpenOffice := CreateOleObject('com.sun.star.ServiceManager');//rajouté par moi pour me connecter cfr lien 2 // On vérifie qu'il n'y a pas déja un service openoffice d'instancié if not isNullEmpty(OOoServer) then OOoServer := Unassigned; Screen.Cursor:= crHourglass; try OOoServer := CreateOleObject('com.sun.star.ServiceManager'); OOoDesktop := CreateUnoService('com.sun.star.frame.Desktop'); // On crée un tableau de variant qui contiendra la propriété "cachée" du document VariantArr := VarArrayCreate([0, 0], varVariant); VariantArr[0] := OOoServer.Bridge_GetStruct('com.sun.star.beans.PropertyValue'); VariantArr[0].Name := 'Hidden'; VariantArr[0].Value := True; OOoDocument := OOoDesktop.LoadComponentFromURL('private:factory/swriter','_blank',0,VariantArr); finally Screen.Cursor:= crDefault; end; try databrut.SelectAll; // on sélectionne tout le memo //deux lignes ajoutées par moi-même databrut.CopyToClipboard; // on l’envoie dans le presse-papiers // On instancie le service openoffice gérant le presse papier OOoClip := CreateUnoService('com.sun.star.datatransfer.clipboard.SystemClipboard'); // On récupère le contenu de presse papier OOoClipContents := OOoClip.getContents; // On récupère les formats de données compatibles: Unicode-Text, Richtext, Bitmap, HTML-Text OOoTypes := OOoClipContents.getTransferDataFlavors; // L'objet récupéré nous donne accès aux propriétés: // HumanPresentableName : le nom du format des données façon "intelligible" ex.: Unicode-Text // MimeType : le nom du format des données ex.: text/plain;charset=utf-16 // DataType : le nom des classes d'objet à utiliser pour la conversion ex.: String AStr := ''; For I := VarArrayLowBound(oTypes, 1) to VarArrayHighBound(oTypes, 1) do begin // Ce qui nous intéresse, c'est de récupérer une chaine // donc on s'arrete dés que l'on a trouvé une données de type chaine if oTypes[i].HumanPresentableName = 'Unicode-Text' then begin // getTransferData retourne un variant, mais comme on sait que c'est une chaine on caste la valeur de retour. AStr := String(oClipContents.getTransferData(oTypes[i])) + #13#10; break; end; end; // Appel de la fonction getText qui retourne l'ensemble du texte du document sous forme d'objet, // sur lequel on appelle la fonction setString qui écrase le contenu par la valeur chaine OOoDocument.getText.setString(AStr); except on e:Exception do ShowMessage(e.Message + #13#10 + e.ClassName); end; end;
La première erreur qui me parvient du compilateur est que isNullEmpty n'est pas déclaré. en le remplaçant comme un peu plus haut par VarIsEmpty le compilateur accepte.
La seconde erreur pour le comparateur a été CreateUnoService, j'ai fais des recherches sur le web mais pas moyen de trouver comment solutionner et essayer de comprendre sur base de mes connaissances.
Alors pas content j'ai essayer d'ouvrir un simple document ooocalc en suivant les FAQ openoffice pour voir si déja cela fonctionne:
ce code a fonctionné, et j'ai donc fait un lien entre OpenOffice.createInstance et CreateUnoService. En le remplacant CreateUnoService par OpenOffice.createINstance dans mon premier code le compilateur ne buggait plus.. (ouéé... ou pas).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 procedure Tmagic_tree.Button1Click(Sender: TObject); var OpenDesktop : Variant; LoadParams : Variant; begin if VarIsEmpty(OpenOffice) then OpenOffice := CreateOleObject('com.sun.star.ServiceManager'); OpenDesktop := OpenOffice.createInstance('com.sun.star.frame.Desktop'); LoadParams := VarArrayCreate([0, -1], varVariant); Document := openDesktop.LoadComponentFromURL( 'private:factory/scalc', '_blank', 0, LoadParams); end;
ensuite les deux variables suivantes non déclarée qui mon été rapportée par Delphi étaient:
oTypes :
oClipContents :
(errreur variables non déclarées)
pour se faire je les ai déclarées comme Variant localement .
Une fois tout ceci fait; mon Delphi (6) arrrive enfin a compilé. mais lorsque j'appuye sur mon button pour lancer la procédure. rien ne se lance. je me doute que c 'est du a mes modifications.. mais je suis incapabable de dire à cause de laquel.
Et vous?
merci l'aide que vous pourrez me fournir. si vous avez besoin de plus d'information n'hésitez pas.
Merci
Partager