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):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
    if  VarIsEmpty(OpenOffice) then
        OpenOffice := CreateOleObject('com.sun.star.ServiceManager');
LE copié collez venant de la Faq et modifié:
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:


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;
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).

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