Delphi Comment coller sous OpenOffice ? (marche pas)
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:
1 2
| if VarIsEmpty(OpenOffice) then
OpenOffice := CreateOleObject('com.sun.star.ServiceManager'); |
LE copié collez venant de la Faq et modifié:
Code:
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:
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