OPENOFFICE - OLE

ikariShinji Messages postés 18 Date d'inscription mercredi 13 mars 2002 Statut Membre Dernière intervention 2 juin 2005 - 8 avril 2004 à 10:30
cedtai Messages postés 25 Date d'inscription samedi 24 juillet 2010 Statut Membre Dernière intervention 28 juillet 2010 - 27 sept. 2009 à 00:29
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/20435-openoffice-ole

cedtai Messages postés 25 Date d'inscription samedi 24 juillet 2010 Statut Membre Dernière intervention 28 juillet 2010
27 sept. 2009 à 00:29
Ben en fait j'ai trouve avec le webBrowser et la DLL AODL
Si ca interesse du monde n'hésitez pas...
cedtai Messages postés 25 Date d'inscription samedi 24 juillet 2010 Statut Membre Dernière intervention 28 juillet 2010
26 sept. 2009 à 02:07
Bonjour, j'aurais besoin pour une application en vb.net d'ouvrir un fichier .odt dans un Panel ou une form comme on pourrait le faire avec un pdf...
Est-ce que cela est possible selon vous...
merci pour toutes reponses.
cs_Saintache Messages postés 13 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 2 décembre 2013
8 févr. 2009 à 15:56
Merci beaucoup pour la réponse mais je viens de trouver la solution (au moins en partie) : Il a suffit que j'enlève l'enrgt en sxw au préalable pour que cela fonctionne

Voir Command2 dans Form1 :
' Enregistrement du document dans son format d'origine (writer)
'Remarque : bizaremment si on sauve en .sxw alors la sauve ultèrieure en .doc ne fonctionne pas !
Call Document.storeToURL(Chemin & "/Nouveau_Document.sxw", args())
cs_tjma Messages postés 10 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 25 août 2006
8 févr. 2009 à 14:21
SAINTACHE,
je dispose également d'OOo version 3.0.0 et je n'ai pas de probleme pour enregistrer au format MS Word 97.
Peut être as tu une info dans ton document que Writer ne sait pas générer dans le format 97 qui commence à dater un peu.
Si tu m'envoie ton programme, je peut faire un essai
cs_Saintache Messages postés 13 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 2 décembre 2013
7 févr. 2009 à 17:13
Source vraiment très intéressante . Je crée sans probléme avec Writer différents formats. Par contre cela plante avec MS WORD 97 (erreur 1001 ) J'utilise Open Office org3.

Le probléme c'est que c'est justement le format qu'il me faudrait.

Merci si quelqu'un à des idées (ou mieux la solution !)
DrJekyllBerry Messages postés 1 Date d'inscription jeudi 24 avril 2008 Statut Membre Dernière intervention 24 avril 2008
24 avril 2008 à 11:44
Bonjour,
Je voudrais faire un truc tout simple en OLE sous PB 7 : ouvrir un doc Open Office et faire l'équivalent d'un fusion sous Word (que je pilotais avec succès depuis PB).
Quelles sont les cdes à utiliser, SVP ? / Où trouver une doc la dessus ?
Merci
Benoît
fredericge Messages postés 1 Date d'inscription mercredi 21 février 2007 Statut Membre Dernière intervention 21 février 2007
21 févr. 2007 à 11:40
Un grand merci pour votre exemple.
J'ai trouvé ce que je cherchais depuis quelques temps.
Je programme en PowerBuilder et l'exemple créé ici m'a permis de m'en sortir (enfin !)
Bonne continuation
nagstef Messages postés 93 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 30 septembre 2008 1
9 août 2006 à 19:05
A force de recherches, nous (un collègue et moi) avons réussi à faire le tri.

Le fichier c:\test.ods est à créer, avec des valeurs (texte ou numériques) dans la première colonne.

Sur une colonne, ca marche ...
Dés que je veux faire un tri sur une 2° colonne, y'a un souci ...

voici le code, sur lequel je n'ai pas fait le ménage ..


Private Sub Form_Load()
Dim objCols As Object
Dim objCol As Object
Dim objRows As Object
Dim objRow As Object
Dim oSheet As Object, oCellRange As Object
Dim aSortDesc(0) As Object
Dim aSortFields(0) As Object
Dim oDescriptor As Variant
Dim aData(0, 4) As String
Dim Plage As Object
Dim Feuille As Object

Dim args(0)
' Création d'un service OpenOffice
Set ServiceManager = CreateObject("com.sun.star.ServiceManager")
Set Desktop55 = ServiceManager.createInstance("com.sun.star.frame.Desktop")

Set args(0) = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")

args(0).Name = "Hidden"
args(0).Value = False ' OpenOffice est invisible

NomduFichier = "file:///c:/test.ods"

NomduFichier = Replace(NomduFichier, "", "/")
Set document55 = Desktop55.loadComponentFromURL(NomduFichier, "_blank", 0, args())

Set feuille5 = document55.Sheets.getByName("Feuille1")

'test
' Set Plage = feuille5.getCellRangeByName("A1:A10")
' Plage.Merge (True)

Set oCellRange = feuille5.getCellRangeByName("A1:A10") 'A1:E1
' Set oCellRange = feuille5.getCellRangeByPosition(0, 0, 0, 10) 'A1:E1

'oCellRange.Merge (True)
' oCellRange.setDataArray (aData())

Set aSortFields(0) = ServiceManager.Bridge_GetStruct("com.sun.star.table.TableSortField")
aSortFields(0).Field = 0
aSortFields(0).IsAscending = True

'aSortFields(0).IsCaseSensitive = False
' aSortFields(0).FieldType = com.sun.star.util.TableSortFieldType.AlphaNumeric
oDescriptor = oCellRange.createSortDescriptor()

' set descriptor's properties
oDescriptor(0).Name = "ContainsHeader"
oDescriptor(0).Value = False
'oDescriptor(1).Name = "Delimiter"
'oDescriptor(1).Value = False
oDescriptor(1).Name = "IsSortColumns"
oDescriptor(1).Value = False
'oDescriptor(3).Name = "MaxSortFieldsCount"
'oDescriptor(3).Value = 2
oDescriptor(2).Name = "SortFields"
oDescriptor(2).Value = aSortFields()


'Set aSortDesc(0) = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
'aSortDesc(0).Name = "SortFields"
'aSortDesc(0).Value = aSortFields()
'aSortDesc(1).Name = "ContainsHeader"
'aSortDesc(1).Value = True
'aSortDesc(2).Name = "IsCaseSensitive"
'aSortDesc(2).Value = True
'aSortDesc(3).Name = "IsSortColumns"
'aSortDesc(3).Value = True

oCellRange.sort (oDescriptor)

End Sub

++, Stef
nagstef Messages postés 93 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 30 septembre 2008 1
16 juin 2006 à 18:18
Bonjour !!

Désolé si je suis embetant avec cela, mais je suis encore bloqué complètement avec cette histoire de tri de cellules.

Je finissais meme par réfléchir a faire une sorte de moulinette qui prendrait 2 mn à travailler, etc ... mais je trouve vraiment que dans ce cas là, c'est du rafistolage.

Loin de moi l'idée de faire du chantage "affectif", mais vous etes mon seul espoir de pouvoir finir l'outil que je mets en place. Comme c'est un outil de gestion de centre de vacances, les delais deviennent de plus en plus court pour etre proposé à mes collègues directeurs de centre pour cette saison, au pire, j'intègrerai un msgbox pour leur dire de faire la manip manuellement mais bon, automatiser la tache serait bien entendu, le top !!

Dans l'attente ...
++, Stef
planchon_a Messages postés 7 Date d'inscription vendredi 21 janvier 2005 Statut Membre Dernière intervention 30 mai 2006
30 mai 2006 à 15:50
Bonjour,

Je cherche à insérer un saut de page en VB sous Writer à partir du code suivant :

' Création d'un service OpenOffice
Set ServiceManager = CreateObject("com.sun.star.ServiceManager")
Set Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop")

' Ouverture d'un nouveau document texte
Set Document = Desktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, Args)

' Création d'un objet texte
Set FTexte = Document.GetText

' Création d'un objet curseur
Set FCursor = FTexte.createTextCursor

'Insertion texte
FTexte.insertString FCursor, TexteAAjouter, False


'SAUT DE PAGE ???????


'Insertion texte
FTexte.insertString FCursor, TexteAAjouter, False



Un coup de main serait le bienvenu - merci
Bonne journée.
André.
Utilisateur anonyme
28 mai 2006 à 20:16
A la page http://api.openoffice.org/docs/common/ref/com/sun/star/frame/XComponentLoader.html

il y a un début de réponse:

Set MonDocument = Desktop.loadComponentFromURL(AdresseDoc, TargetFrameName, 0, PropFich())



Parameter TargetFrameName

specifies the name of the frame to view the document in
If a frame with the specified name already exists, it is used, otherwise it is created. There exist some special targets which never can be used as real frame names: "_blank" always creates a new frame
"_default" special UI functionality
(e.g. detecting of already loaded documents, using of empty frames of creating of new top frames as fallback)
"_self", ""(!) means frame himself
"_parent" address direct parent of frame
"_top" indicates top frame of current path in tree
"_beamer" means special sub frame

Voilà aprés il faut faire des essais
odyssee_22 Messages postés 1 Date d'inscription vendredi 10 février 2006 Statut Membre Dernière intervention 28 mai 2006
28 mai 2006 à 18:52
Bonjour NagStef,

Au sujet de la question que tu posais pour ouvrir plusieurs documents dans une même instance Calc : l'utilisation de "_blank" dans LoadComponentFromURL est-elle la bonne solution ou faut-il faire autrement ?
Je testerai ça demain, je cherche à faire la même chose ...
Merci d'avance
nagstef Messages postés 93 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 30 septembre 2008 1
27 mai 2006 à 00:32
Re !!

J'ai essayé aussi de chercher par mes modestes moyens et connaissances, mais rien trouvé non plus ..

Si tu es toujours sur le coup, ou si tjma peux nous aider aussi, c'est vraiment le dernier point qui me permettra de finir mon programme.

Merci encore de votre attention..

Stef
Utilisateur anonyme
22 mai 2006 à 11:31
J'ai pu regarder un peu ta question, et hélas n'apporte pas de réelle solution, seulement un bout de code qui ne génère pas d'erreur, mais le tri ne se fait pas.
J'ai aussi testé le code source dans OPenOffice Basic et là ça marche.
J'ai pu lors de cet essai extraire les valeurs de TableOrientation

dons tu peux mettre ce code au niveau module de ton apli

Enum TableOrientation
Rows = 1
Columns = 0
End Enum


Ensuite on admet qu'une autre porcédure ait ouvert le document avec la feuille qui va bien
et qu'on appelle la fonction suivante depuis la procédure.

Function TriageDonnées(MaFeuille As Object)

Dim ConfigTri(0 To 1) As Object
Set ConfigTri(0) = ServiceManager.Bridge_GetStruct("com.sun.star.util.SortField")
Set ConfigTri(1) = ServiceManager.Bridge_GetStruct("com.sun.star.util.SortField")
'Set ConfigTri(2) = ServiceManager.Bridge_GetStruct("com.sun.star.util.SortField")

Dim DescrTri(0 To 2) As Object
Set DescrTri(0) = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
Set DescrTri(1) = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
Set DescrTri(2) = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")

Set MaZone = MaFeuille.getCellRangeByName("ZoneDeTris")


ConfigTri(0).Field = 0 ' colonne A
ConfigTri(0).SortAscending = true
ConfigTri(1).Field = 1 ' colonne B
ConfigTri(1).SortAscending = Fasle
'ConfigTri(2).Field = 3 ' colonne D
'ConfigTri(2).SortAscending = True

DescrTri(0).Name = "SortFields"
DescrTri(0).Value = ConfigTri()
DescrTri(1).Name = "Orientation"
DescrTri(1).Value = TableOrientation.Rows
DescrTri(2).Name = "ContainsHeader"
DescrTri(2).Value = True

Call MaZone.Sort(DescrTri())


End Function

Donc là pas d'erreur, Calc pense que le tableau a été modifié mais manifestement rien de visible ne c'est passé.
Enfin cherche sur cette base (peut être), je tache de continuer dans la semaine.
nagstef Messages postés 93 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 30 septembre 2008 1
20 mai 2006 à 13:10
Bonjour !!

Finalement, il n'aura pas fallu longtemps pour que j'ai besoin d'aide ..

En page 33 du fichier API, il y a la méthode pour trier des cellules, voici ce qui est proposé :

Dim MaFeuille As Object, MaZone As Object
Dim ConfigTri(2) As New com.sun.star.util.SortField
Dim DescrTri(2) As New com.sun.star.beans.PropertyValue

MaFeuille = ThisComponent.Sheets.getByName("F_Tris")
MaZone = MaFeuille.getCellRangeByName("ZoneDeTris")

ConfigTri(0).Field = 1 ' colonne B
ConfigTri(0).SortAscending = false
ConfigTri(1).Field = 0 ' colonne A
ConfigTri(1).SortAscending = true
ConfigTri(2).Field = 3 ' colonne D
ConfigTri(2).SortAscending = true

DescrTri(0).Name = "SortFields"
DescrTri(0).Value = ConfigTri()
DescrTri(1).Name = "Orientation"
DescrTri(1).Value = com.sun.star.table.TableOrientation.ROWS
DescrTri(2).Name = "ContainsHeader"
DescrTri(2).Value = true

MaZone.Sort(DescrTri())

Bien sur, j'ai rempli la zone de tri et remplacé les déclarations suivantes de cette façon :
Dim ConfigTri(0)
Set ConfigTri(0) = ServiceManager.Bridge_GetStruct("com.sun.star.util.SortField")

Dim DescrTri(2)
Set DescrTri(2) = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")

et là, j'ai une erreur au niveau de :
DescrTri(0).Name = "SortFields" <== Un objet est requis

Auriez-vous une idée ?? Merci encore !!
nagstef Messages postés 93 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 30 septembre 2008 1
18 mai 2006 à 16:49
Putain, comme c'est bon de se sentir épaulé, et aidé !!!

Je te remercie infiniment pour ton aide. Pour les suivants, il a fallut tout de même corriger 2 erreurs minimes de syntaxe uniquement :

Set ServiceManager = CreateObject("com.sun.star.frame.ServiceManager ") (y'a un espace en trop à la fin, avant le guillemet")

Set PropFich(0) = ServiceManager.Bridge_GetStruct
("com.sun.star.beans.PropertyValue")
doit s'ecrire à la suite
Set PropFich(0) = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")

Merci encore beaucoup ...
Mais accorde-moi l'autorisation de t'enquiquiner encore un peu en cas de souci ..

++, Stef
Utilisateur anonyme
18 mai 2006 à 14:11
C'est que le document présente la programmation en langage OpenBasic, soit le langage basic des macro d'OpenOffice.
Ce langage est légérement différent de VB, il faut donc traduire.

C'est là ou la source de tjma donne une bonne base de départ (toutes les lignes ci dessous ou presque y sont)

Sinon dans ton cas

Dim MonDocument As Object
Dim AdresseDoc As String
Dim PropFich(0) As New com.sun.star.beans.PropertyValue

AdresseDoc = "file:///home/testuser//work/Finances.sxc"

PropFich(0).Name = "Hiden"
PropFich(0).Value = "True"
MonDocument = StarDesktop.LoadComponentFromURL(AdresseDoc,"_blank",0, PropFich() )

va donner

Dim ServiceManager As Object
Dim MonDocument As Object
Dim PropFich(0)

' Ouverture d'un document existant (modele)
AdresseDoc = "file:///home/testuser//work/Finances.sxc"

'il faut creer le lien avec l'api "ServiceManager" et "Desktop" sont deux objects actifs dans openoffice, pour vb il faut aller les chercher

Set ServiceManager = CreateObject("com.sun.star.frame.ServiceManager ")
Set Desktop = = CreateInstance("com.sun.star.frame.Desktop")


'il faut aller chercher dans l'api la structure "com.sun.star.beans.PropertyValue"
Set PropFich(0) = ServiceManager.Bridge_GetStruct
("com.sun.star.beans.PropertyValue")

PropFich(0).Name = "Hidden"
PropFich(0).Value = False ' OpenOffice est visible

'il faut mettre des "set" un peu partout
Set MonDocument = Desktop.loadComponentFromURL(AdresseDoc, "_blank", 0, PropFich())
nagstef Messages postés 93 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 30 septembre 2008 1
15 mai 2006 à 09:18
Il est vrai, mais je me suis mal exprimé, dsl !

En fait, en copiant mot à mot le code (et le tien de surcroit), b'en j'ai une erreur à cette ligne

Dim PropFich(0) As New com.sun.star.beans.PropertyValue <=== Type défini par l'utilisateur non défini.

Et c'est là que je cale !!

Merci encore et toujours !!
Utilisateur anonyme
14 mai 2006 à 21:33
Pour rendre ton document invisible il faut l'ouvrir comme suit cf pages 15 et 16 du how to ou plusieures propietes "PropFich()" sont évoqué.
Travailler en toile de fond pose cependant un problème de taille, si ton appli vb plante, l'instance openoffice reste active et tu ne peux plus acceder à ton document (ou du moins je n'ai pas trouvé comment...) et donc gestionnaire de tache pour arreter le processus soffice.bin et soffice.exe



Dim MonDocument As Object
Dim AdresseDoc As String
Dim PropFich(0) As New com.sun.star.beans.PropertyValue

AdresseDoc = "file:///home/testuser//work/Finances.sxc"

PropFich(0).Name = "Hiden"
PropFich(0).Value = "True"
MonDocument = StarDesktop.LoadComponentFromURL(AdresseDoc,"_blank",0, PropFich() )
nagstef Messages postés 93 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 30 septembre 2008 1
14 mai 2006 à 15:15
Merci pour cette ressource vraiment interressante !!
Par contre, je n'ai pas trouvé mon bonheur dedans !! En faite, je travaille sur plusieurs documents calc,3 voir 4, et je voudrais 2 choses, qui se font avec Excel c'est :
- La possibilité de placer des feuilles ouverte dans une même instance calc, et non pas une instance par document, je pense que c'est la formule "_blank" du LoadComponentFromURL
- La possibilité de travailler en arrière plan, sans que les fenetres actives soient visibles.

Merci encore infiniment (Je pese mes mots :)) )

Stef
Utilisateur anonyme
14 mai 2006 à 11:26
Pour nagstef

Info$ = Feuille1.getcellbyposition(1, 1).String

tu peux aussi te référer à ce "How to" en français,
http://fr.openoffice.org/Documentation/How-to/Basic/OOo_API_intro-07.sxw

C'est du Langage OpenBasic, il faut remamier un peu pour en faire du VB6 mais c'est une veritable bible.
planchon_a Messages postés 7 Date d'inscription vendredi 21 janvier 2005 Statut Membre Dernière intervention 30 mai 2006
14 mai 2006 à 09:56
Bonjour,

Un grand merci à TJMA et son exemple qui m'a permis d'avancer dans mon code. (Migration de tableaux réalisés en VBA Excel vers du Calc piloté par VB6).

Merci pour ta réponse rapide !!!
nagstef Messages postés 93 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 30 septembre 2008 1
14 mai 2006 à 03:40
Heuu, c'est encore moi :)

Avez-vous aussi une idée de comment faire en sorte que la feuille Calc sur laquelle je travaille, se situe en arrière plan, et non pas en ouvrant OOo à chaque fois ...

Merci encore et toujours ..
nagstef Messages postés 93 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 30 septembre 2008 1
13 mai 2006 à 22:41
Bonjour !!!

Pourrais-je avoir la formule pour recupérer une donnée TEXTE, dans une cellule bien définie.

Info$ = Feuille1.getcellbyposition(1, 1).????

Merci
planchon_a Messages postés 7 Date d'inscription vendredi 21 janvier 2005 Statut Membre Dernière intervention 30 mai 2006
11 mai 2006 à 10:24
Un Grand merci pour ce code qui m'a d'avancer....

Quelqu'un aurait un exemple de code pour la réalisation d'un quadrillage sur une zone de cellules Calc. (quadrillage simple !)

MERCI !!!

Encore merci pour le code source !!!!!!!!!!
vainvain3 Messages postés 3 Date d'inscription samedi 3 décembre 2005 Statut Membre Dernière intervention 6 avril 2006
6 avril 2006 à 09:26
Merci Tjma , je débute en VB et tes sources pour Open Office m'aide bien, par contre je ne sais pas comment faire pour créer une nouvelle feuille calc et pour fusionner deux cellules.
Merci par avance et encore bravo
survcopt Messages postés 224 Date d'inscription mardi 27 mai 2003 Statut Membre Dernière intervention 13 mai 2022 3
29 mars 2006 à 15:32
Excellent,
Un tuto plein d'infos utiles , comment pourrais-je relire la cellule A2 de la feuille3 de OOocalc?
Merci
Xoh Messages postés 2 Date d'inscription mercredi 19 juin 2002 Statut Membre Dernière intervention 2 mars 2005
14 nov. 2005 à 14:31
Merci pour ta source.

Je me permet de rajouter une URL qui m'a été fort utile pour démarrer :
http://www.kalitech.fr/clients/doc/VB_APIOOo_fr.html

Pas mal d'exemples, de procédures déjà écrites et prêtes à tester !
JY71 Messages postés 1 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 7 octobre 2005
7 oct. 2005 à 20:02
C'est vraiment Génial !! Bravo.
Voici un lien qui peut aussi vous aider http://docs.sun.com/app/docs/doc/817-1826-10
Ce qui serait vraiment bien ce serait d'en faire une classe comme celle pour Word déjà dispo sur ce site .
nicoine Messages postés 51 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 23 février 2012
1 août 2005 à 09:53
Pour ouvrir un document existant fait comme ceci::

Fichier = "c:\....

Set OpenOffice = CreateObject("com.sun.star.ServiceManager")
Set Bureau = OpenOffice.createInstance("com.sun.star.frame.Desktop")

Fichier = Replace(Fichier, "", "/")
Dim args()

Set Monfichier = Bureau.loadComponentFromURL("file:///" & Fichier, "_blank", 0, args())
cs_fostex Messages postés 50 Date d'inscription mardi 18 novembre 2003 Statut Membre Dernière intervention 5 septembre 2006
30 juil. 2005 à 12:10
Salut,

Je n'ai pas bien compris,
Quelle est la méthode pour ouvrir un document existant
mareci
cs_toto1980 Messages postés 81 Date d'inscription lundi 13 janvier 2003 Statut Membre Dernière intervention 15 février 2008 1
30 mai 2005 à 21:50
Salut
Je cherche une fonction pour un aperçu avant impression sous le tableur.
Merci d'avance
Utilisateur anonyme
31 mars 2005 à 11:56
j'ai eu le probleme "com.sun.star...." sur un pc équipé d'XP. Dans mon cas et je l'ai résolue grace au forum, la référence n'était accéssible que dans la session administrateur d'ou avait été installer Ooo, il m'a donc fallut reinstaller Ooo dans la session utilistateur et en tant qu'utlisateur.

Merci a tous
ikariShinji Messages postés 18 Date d'inscription mercredi 13 mars 2002 Statut Membre Dernière intervention 2 juin 2005
20 janv. 2005 à 17:55
J'ai oublié de dire que ce magnifique lien concerne la programmation de macros intégrées dans le OOo Basic, il y a donc certaines fonctions propres à ce langage qui n'existent pas dans VB6, et qu'il vous faudra recoder, en voici la liste :

* ConvertToUrl
* HasUnoInterface
* CreateUnoStruct
* CreateUnoService
* CreateUnoDialog
* CreateUnoListener
* CreateUnoValue
* ThisComponent
* Dbg_Methods
* Dbg_Properties


Par exemple pour la 1ère, lorsque vous voulez ouvrir un document existant dans OOo, vous devez passer son chemin complet sous forme d'URL à la fonction LoadComponentFromURL. Pour ce faire, le Basic d'OOo fournit une fonction qui traduit la chaîne en URL, ce qui donne :

AdresseDoc = objDesktop.ConvertToURL(cheminCompletDoc)
objDocument = objDesktop.LoadComponentFromURL(AdresseDoc, "_blank", 0, PropFich)

Sauf qu'en VB6, ConvertToUrl n'existe pas, il vous faut donc la coder comme suit :

Public Function ConvertToUrl(strFile) As String
strFile = Replace(strFile, "", "/")
strFile = Replace(strFile, ":", "|")
strFile = Replace(strFile, " ", "%20")
strFile = "file:///" + strFile
ConvertToUrl = strFile
End Function

etc... A vous de jouer ! On vous a mâché le travail ^_^
cs_tjma Messages postés 10 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 25 août 2006
20 janv. 2005 à 16:43
Super découverte ikariShinji ! (j'ai pas testé)
Voila qui par populariser Visual Basic avec OOo

bon, bah bon courage à tous.
ikariShinji Messages postés 18 Date d'inscription mercredi 13 mars 2002 Statut Membre Dernière intervention 2 juin 2005
20 janv. 2005 à 14:49
Et voilà, j'ai trouvé la bible de la programmation OLE avec Oo :D

http://fr.openoffice.org/Documentation/How-to/indexht.html

Je vous conseille en particulier le SXW intitulé :

"03 - l'API d'OOo (presque) sans peine"

Du pur bonheur, en Français, complet et très clairement expliqué, j'ai enfin réponse à toutes mes questions, vive les dévs libres ! :)
ikariShinji Messages postés 18 Date d'inscription mercredi 13 mars 2002 Statut Membre Dernière intervention 2 juin 2005
20 janv. 2005 à 14:02
Je suis remonté à la source pour trouver des infos, à savoir sur le site de Sun, par exemple :

http://api.openoffice.org/source/browse/api/odk/examples/OLE/vbscript/WriterDemo.vbs?rev=1.2&hideattic=1&content-type=text/vnd.viewcvs-markup

Je finirai bien par trouver tout ce que je cherche arf...
ikariShinji Messages postés 18 Date d'inscription mercredi 13 mars 2002 Statut Membre Dernière intervention 2 juin 2005
20 janv. 2005 à 11:16
Salut tlm !

Hier j'ai repris le développement de mon projet de transition de MSWord/LotusWordPro vers OpenOffice pour un soft de ma boîte, que j'avais laissé à l'abandon il y a 9 mois (cf 1ers msg ci-dessus) pour des raisons politiques (mon Directeur n'était pas encore prêt à passer au monde du Libre lol, ce qui est désormais chose faite ;) )

Il est clair que depuis, il est plus facile de trouver des infos sur ce lien OLE, mais rien de très précis encore.

J'ai résolu mon problème d'instanciation en installant Oo v1.1.4 sur une nouvelle machine, et j'ai pû enfin tester ton code qui marche, encore merci tjma :)

Mais je cherche toujours réponse à mes questions du début (mes recherches n'ont commencé qu'hier mais bon, peut-être trouverai-je de l'aide ici !) :

- comment faire une sauvegarde d'un document Oo au format désiré ( RTF... ) ?

- comment ouvrir un document existant ?

- comment récupérer dans le clipboard une sélection dans un document ? (je le fais avec MSWord et LotusWordPro)

Au passage si çà peut aider, voici le code pour compter le nombre d'instances ouvertes : objDesktop.Frames.Count

Pourquoi est-il impossible de trouver chez Sun une liste des fonctions disponibles pour faire ce lien OLE ?! arf (j'avais eu le même problème à l'époque avec Lotus Word Pro, alors qu'avec MS Office il existe une aide à installer et l'intellisense en déclarant une référence)
RaspySoft Messages postés 1 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 23 décembre 2004
23 déc. 2004 à 16:15
tjma,
merci pour ton example.
J'ai trové dans le code deux questions:
Largeur de colonne?
Hauteur de ligne?

J'espère que le code suivant peut t'aider.


' Largeur de colonne ?
''http://api.openoffice.org/docs/common/ref/com/sun/star/table/TableColumn.html#Width

Dim objCols As Object
Dim objCol As Object

Set objCols = Feuille.getColumns
Set objCol = objCols.getByIndex(0)
''objCol.Width = 3000
objCol.OptimalWidth = True
Set objCol = objCols.getByIndex(1)
objCol.OptimalWidth = True
Set objCol = objCols.getByIndex(2)
objCol.OptimalWidth = True

' Hauteur de ligne ?

Dim objRows As Object
Dim objRow As Object

Set objRows = Feuille.getRows
Set objRow = objRows.getByIndex(0)
objRow.Height = 1000
''objRow.OptimalHeight = True
cs_tjma Messages postés 10 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 25 août 2006
13 oct. 2004 à 16:36
Concernant mon inspiration, je l'ai trouvée à l'adresse suivante http://www.oooforum.org/forum/

Mais depuis quelques temps, il y a beaucoup de liens qui ont été inscrits dans les divers moteurs de recherche
exemple Google : rechercher "openoffice api visual basic"

ça devrait vous aider !
cs_tobby Messages postés 17 Date d'inscription jeudi 16 mai 2002 Statut Membre Dernière intervention 9 mars 2010
13 oct. 2004 à 15:55
Une autre question : Est-ce que quelqu'un sait comment inserer une image dans un tableau ? type jpg ou autre..
cs_tobby Messages postés 17 Date d'inscription jeudi 16 mai 2002 Statut Membre Dernière intervention 9 mars 2010
11 oct. 2004 à 22:57
Bonjour a tous !
Cette source est vraiment tres bonne !
J'aimerai faire le meme genre de programme en C++ (VC++).
Ou trouver de la documentation sur l'interfacage avec OOO ?
Dans un commentaire tjma, tu parles d'une doc trouvee sur internet, pourrais-tu me l'envoyer ?

Merci par avance, et encore felicitation pour cette source ! :)

Tobby.
nicoine Messages postés 51 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 23 février 2012
7 oct. 2004 à 09:21
Tu peux le laisser ouvert ce processus, il permet d'ouvrir OpenOffice plus rapidement mais prend de la place mémoirer c'est vrai! Moi je fais un "Dispose"(voir ci-dessous).

Sinon tu peux utiliser "KillProcessus ("soffice.exe")" afin de stoper complètement le processus.

'-----------------------------------------------------------
Set OpenOffice = CreateObject("com.sun.star.ServiceManager")

Set Bureau = OpenOffice.createInstance("com.sun.star.frame.Desktop")

Set Monfichier = Bureau.loadComponentFromURL("file:///" & Fichier, "_blank", 0, args())

Monfichier.dispose
'-----------------------------------------------------------
cs_Sylfeline Messages postés 8 Date d'inscription mercredi 30 mai 2001 Statut Membre Dernière intervention 6 octobre 2004
6 oct. 2004 à 17:34
Pas mal, mais j'ai un petit soucis
Avec tes sources, OpenOffice reste en mémoire (soffice dans le gestionnaire des tâches)
En utilsant "Terminate" sur l'objet "Desktop" ca le quitte, mais la plupart j'ai une erreur de OOo (L'instruction à "0x000000040" bla bla bla bla bla ...)

est-ce que quelqu'un a la même erreur ??
zapzapzap Messages postés 1 Date d'inscription mardi 10 août 2004 Statut Membre Dernière intervention 10 août 2004
10 août 2004 à 14:18
Salut,
Chapeau pour tes sources, c'est vrai qu'il n'y a pas grand chose qui traine sur le WWW quand à OLE/ openoffice.
Je bosse sur PB, mais ton script se traduit aisément...
Si tu as déjà bossé sur les champs variables, c'est ce sur quoi je suis en train de bosser...
Je pense poster mes resultats la semaine prochaine.
ValMMM Messages postés 1 Date d'inscription mercredi 14 juillet 2004 Statut Membre Dernière intervention 3 août 2004
3 août 2004 à 11:22
Excellent tjma ! J'étais justement entrain de bosser la dessus depuis le début de la semaine, et voilà que je tombe sur ton code qui va sûrement me faire gagner du temps de développement.

Encore merci pour tes sources !
miaousse666 Messages postés 3 Date d'inscription jeudi 1 juillet 2004 Statut Membre Dernière intervention 6 juillet 2004
6 juil. 2004 à 18:07
Finalement après de longues heures à chercher sur le site d'OO j'ai trouver la méthode qui va bien : terminate
A mon avis il y a plus classieux pour quitter OO mais celle la fonctionne !!!
miaousse666 Messages postés 3 Date d'inscription jeudi 1 juillet 2004 Statut Membre Dernière intervention 6 juillet 2004
5 juil. 2004 à 12:01
Mon but est de remplir automatiquement un fichier texte à l'aide d'OO sous Visual Basic.

Donc à la creation (méthode LoadComponentFromURL) j'ai ajouté l'argument Hidden avec comme valeur True pour que le remplissage du texte soit invisible.
Une fois le texte enregistré, mon programme se termine et je veux quitter OO.

Malheureusement la méthode currentframe./activeFrame.close() ne fonctionne pas (alors qu'elle fonctionne quand mon fichier n'est pas caché).
J'ai essayé aussi la méthode Kill de VB (Kill (soffice.exe)) mais sans résultat.

Quelqu'un a-t-il une idée ?
Ce serait très urbain....

Merci d'avance

Quelqu'un connait il
cs_tjma Messages postés 10 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 25 août 2006
2 juil. 2004 à 17:39
Merci les amis !
miaousse666 Messages postés 3 Date d'inscription jeudi 1 juillet 2004 Statut Membre Dernière intervention 6 juillet 2004
1 juil. 2004 à 09:40
Un grand BRAVO !!!!
enfin une alternative à ce p***** de msword !!!!

Continuons sur cette voie !

Le salut de notre âme vient de OpenOffice

tjma : 10/10 !!!
xender38 Messages postés 1 Date d'inscription mardi 23 mars 2004 Statut Membre Dernière intervention 27 avril 2004
27 avril 2004 à 15:18
bonjour

j'ai eu le même soucis que ikariShinji, en réessayant le code aujourd'hui, alors que tout avait bien marché il y a deux semaines !

En fait, l'enregistrement du composant "com.sun.star" n'était plus bon dans le registre de ma machine, suite à plusieurs installations/désinstallation de OOO 1.1.0 et OOO 1.1.1

J'ai résolu le problème en faisant une réparation de l'installation OOO 1.1.1, et tout s'est remis d'aplomb.
cs_tjma Messages postés 10 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 25 août 2006
17 avril 2004 à 07:51
J'ai installé la dernière version d'OOo (1.1.1) et ça fonctionne aussi bien que sur les précédentes versions.
Désolé ikariShinji mais faut chercher ailleurs. (ou en es tu ?)
En ce qui concerne l'intellisence, je ne sais pas non plus quel dll il
faut référencer. Le premier qui trouve ...
ikariShinji Messages postés 18 Date d'inscription mercredi 13 mars 2002 Statut Membre Dernière intervention 2 juin 2005
9 avril 2004 à 17:57
PS : tu devrais mettre des explications dans "Description de la source" pour ceux qui ne connaissent pas l'OLE :p
ikariShinji Messages postés 18 Date d'inscription mercredi 13 mars 2002 Statut Membre Dernière intervention 2 juin 2005
9 avril 2004 à 17:55
ok merci, j'attends impatiemment la suite :D

J'ai OOo 1.1.1 sous XP, peut-être que mon erreur vient de cette version, même si çà me paraît étonnant... si un jour, tu as l'occasion de tester ton code avec la 1.1.1, préviens-moi pour me dire si çà marche ou non ;)

Par contre, si tu n'ajoutes pas dans ton projet de référence à OOo OLE, tu n'as alors pas accès aux Infos paramètres ? çà ne te facilite pas la tâche pour trouver les accesseurs qui vont bien :( ( lorsqu'on tape le "." )

Bon çà ne marche pas chez moi, mais ton code me paraît correct donc je te mets la note maxi pour l'initiative dans un domaine à défricher ;) ( et qui fait un pied de nez à MS Word ^_^ )
cs_tjma Messages postés 10 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 25 août 2006
9 avril 2004 à 14:19
Salut ikariShinji,
eh bien avant de ce recevoir ton commentaire, je pensais que ce sujet n'interessait personne. Je te remercie pour ton commentaire ça va me permettre de me replonger dans ce sujet.
En ce qui concerne tes problèmes : Il n'est pas necessaire de déclarer une référence à OOo, l'exemple que j'ai posté fonctionne avec OOo 1.0.1 et 1.1.0 et sous 98,ME,XP (j'ai pas testé les autres OS). Je n'ai pas constaté cette erreur.
Pour sauvegarder et fermer OOo, je vais poster (très prochainement) un exemple, pour le reste ya encore du boulot car je décortique de la doc trouvée sur internet (ça prend du temps). J'ai trouvé quelques ligne de code sur www.oooforum.org rubrique macro et api (il y a des heures de lecture car très peut d'exemples sont consacrés à VB)
salut
ikariShinji Messages postés 18 Date d'inscription mercredi 13 mars 2002 Statut Membre Dernière intervention 2 juin 2005
8 avril 2004 à 10:30
Génial ! Je croyais qu'on ne pouvait pas utiliser l'OLE avec OpenOffice ! ( je devais encore en être à StarOffice lol )

Sauf qu'avec ton code j'ai une erreur automation sur la ligne :

Set Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop")

Peut-être dois-je ajouter une référence ( dans Projet->Références ) ? mais je n'en ai pas trouvé pour OpenOffice. Pour info, j'ai installé OpenOffice 1.1 version française ( pas la Solaris en anglais )

Autrement, sais-tu comment faire une sauvegarde d'un doc au format désiré ( RTF... ) ? comment fermer Oo ? comment tester sur une instance Oo est déjà ouverte ? et enfin comment ajouter une image ?

Où as-tu trouvé la documentation OLE/OpenOffice avec VB6 stp ?
Je trouve rien sur le sujet sur le net, à part en Delphi :(
Rejoignez-nous