C'est possible ?Je suis quand meme debutant en vb.
Et desoler si ya un autre thread sur ce sujet j'ai pas trouver avec le search![]()
C'est possible ?Je suis quand meme debutant en vb.
Et desoler si ya un autre thread sur ce sujet j'ai pas trouver avec le search![]()
bonsoir
ton message est pour le moins évasif . j'ai interprété ta question : est il possible de piloter Open Office depuis VB? oui c'est possible
ci dessous quelques exemples pour piloter Open Office depuis Excel ( en Vb c'est pratiquement identique )
Ouvrir un document Writer existant et insérer des données ,à la suite de la dernière ligne
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 Sub ouvrirSessionOpenOffice() 'macro testée avec Excel2002 et OOo 1.1.0 Dim serviceManager As Object, oText As Object, oCursor As Object Dim Desktop As Object, Document As Object Dim Chemin As String, Fichier As String Dim args() 'adapter le chemin et le nom du fichier en fonction du projet Chemin = "file:///" & thisWorkbook.Path Chemin = Application.worksheetFunction.Substitute(Chemin, "\", "/") Fichier = Chemin & "/test.sxw" Set serviceManager = createObject("com.sun.star.serviceManager") Set Desktop = serviceManager.createInstance("com.sun.star.frame.Desktop") Set Document = Desktop.loadComponentFromURL(Fichier, "_blank", 0, args) Set oText = Document.getText() Set oCursor = oText.createTextCursor oCursor.gotoEnd (False) oText.insertString oCursor, "Le forum Developpez.com & OOo", False End Sub
Copier une plage de cellules Excel et la coller dans un nouveau document Writer ,puis sauvegarder le document
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 Sub creerNouveauDocumentWriter() Dim oServiceManager As Object, oDispatcher As Object Dim Desktop As Object, Document As Object Dim args() Dim Chemin As String Range("A1:A5").Copy Set oServiceManager = createObject("com.sun.star.serviceManager") Set Desktop = oServiceManager.createInstance("com.sun.star.frame.Desktop") Set Document = Desktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, args) Set oDispatcher = oServiceManager.createInstance("com.sun.star.frame. DispatchHelper") oDispatcher.executeDispatch Document.currentController.Frame, ".uno:Paste", "", 0, Array() Chemin = Application.worksheetFunction.Substitute(thisWorkbook.Path, "\", "/") Chemin = "file:///" & Chemin & "/essai.sxw" Document.storeToURL Chemin, args() Document.Close (True) End Sub
Compter le nombre de documents Open Office ouverts et afficher le format des documents non enregistré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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 Sub compterNombreDocumentsOpenOfficeOuverts() 'macro testée avec Excel2002 et OOo 1.1.0 'Dim oComponents As Object, Cible As Object Dim Desktop As Object, oServiceManager As Object, oComponent As Object Dim Nombre As Byte Dim listeDoc As String, leFichier As String On Error Resume Next Set oServiceManager = createObject("com.sun.star.serviceManager") Set Desktop = oServiceManager.createInstance("com.sun.star.frame.Desktop") Set oComponents = Desktop.getComponents() Set Cible = oComponents.createEnumeration() Do While Cible.hasMoreElements() Set oComponent = Cible.nextElement() leFichier = oComponent.getLocation() If Err.Number = 0 Then If leFichier = "" Then leFichier = "Document ( " & typeDoc(oComponent) & " ) non enregistré" 'Else 'leFichier = Right(leFichier, Len(leFichier) - 8) 'leFichier = Application.worksheetFunction.Substitute(leFichier, "\", "/") 'leFichier = Application.worksheetFunction.Substitute(leFichier, "%20", " ") End If listeDoc = listeDoc & leFichier & vbLf Nombre = Nombre + 1 End If Err.Number = 0 Loop msgBox "Nombre de documents Open Office ouverts : " & Nombre & vbLf & vbLf & listeDoc End Sub Function typeDoc(Obj As Object) As String 'adapté d'une procédure de Laurent Godard If Obj.supportsService("com.sun.star.text.TextDocument") = True Then typeDoc = "Writer" If Obj.supportsService("com.sun.star.sheet.SpreadsheetDocument") = True Then typeDoc = "Calc" If Obj.supportsService("com.sun.star.presentation.PresentationDocument") = True Then 'un document Sxi retourne True à la fois pour impress et draw typeDoc = "Impress" Exit Function End If If Obj.supportsService("com.sun.star.drawing.DrawingDocument") = True Then typeDoc = "Draw" End Function
Ouvrir un document Open Office , protégé par mot de passe
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 Sub ouvrirDocOpenOfficeProtegeParPassword() 'macro testée avec Excel2002 et OOo 1.1.0 'ouvrir un document Writer protégé par mot de passe Dim serviceManager As Object, Desktop As Object, Document As Object Dim Chemin As String, Fichier As String Dim Args(0) As Object 'adapter le chemin et le nom du fichier en fonction du projet : 'dans l'exemple le document OOo , nommé test2.sxw est dans le même 'répertoire que le classseur Excel contenant cette macro Chemin = "file:///" & thisWorkbook.Path Chemin = Application.worksheetFunction.Substitute(Chemin, "\", "/") Fichier = Chemin & "/test2.sxw" Set serviceManager = createObject("com.sun.star.serviceManager") Set Desktop = serviceManager.createInstance("com.sun.star.frame.Desktop") Set Args(0) = serviceManager.Bridge_getStruct("com.sun.star.beans.PropertyValue") Args(0).Name = "Password" Args(0).Value = "1234" Set Document = Desktop.loadComponentFromURL(Fichier, "_blank", 0, Args()) End Sub
Fermer toutes les fenêtres Open office ouvertes , sans sauvegarde des documents
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Sub fermerToutesLesFenetresOOoSansSauvegarde() Dim serviceManager As Object, Desktop As Object Dim i As Byte Set serviceManager = createObject("com.sun.star.serviceManager") Set Desktop = serviceManager.createInstance("com.sun.star.frame.Desktop") For i = 1 To Desktop.Frames.getCount 'compte le nombre de fenetres OOo ouvertes Desktop.getFrames.getByIndex(0).Close (False) Next i End Sub
Afficher les boites de dialogue intégréees Open Office depuis Excel
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Sub afficherBoiteDialoguesIntegreesOOo() 'macro testée avec Excel2002 et OOo 1.1.0 'exemple: boite de dialogue "recherche répertoire" Dim oFolderDialog As Object, serviceManager As Object Dim i As Integer Set serviceManager = createObject("com.sun.star.serviceManager") Set oFolderDialog = serviceManager.createInstance("com.sun.star.ui.dialogs.FolderPicker") oFolderDialog.setDisplayDirectory ("C:\Documents and Settings")'adapter le chemin par défaut i = oFolderDialog.Execute() If i = 1 Then msgBox oFolderDialog.getDirectory End Sub
Sauvegarder un document OOo depuis excel
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 Sub Sauvegardes_OOo_XLs() 'créer un nouveau classeur OOo Calc 'y insérer les données de la plage A1:A10(du classeur contenant cette macro) 'sauvegarder au format .sxc 'puis faire une copie de sauvegarde au format Excel Dim Args(), Args2(0) Dim oServ As Object, oDesk As Object, oSheet As Object, Doc As Object Dim Valeur As String Dim i As Byte Set oServ = CreateObject("com.sun.star.ServiceManager") Set oDesk = oServ.createInstance("com.sun.star.frame.Desktop") Set Doc = oDesk.loadComponentFromURL("private:factory/scalc", "_blank", 0, Args) Set oSheet = Doc.getSheets().getByIndex(0) For i = 0 To 9 Valeur = Cells(i + 1, 1) oSheet.getCellByPosition(0, i).SetString (Valeur) Next i Doc.StoreAsURL "file:///C:/monClasseur.sxc", Args Set Args2(0) = oServ.Bridge_GetStruct("com.sun.star.beans.PropertyValue") Args2(0).Name = "FilterName" Args2(0).Value = "MS Excel 97" Doc.StoreToURL "file:///C:/monClasseur.xls", Args2 Doc.Close (True) End Sub
Redimensionner une fenetre OOo depuix Excel
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 Sub redimensionnerFenetre_OOo() Dim ServiceManager As Object Dim Desktop As Object, Document As Object Dim Args() Dim X As Object Set ServiceManager = CreateObject("com.sun.star.ServiceManager") Set Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop") 'creation d'un document Writer Set Document = Desktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, Args) Set X = Desktop.getFrames().getByIndex(0).getContainerWindow() 'redimensionne la fenetre 'Left - Top - Width - Height X.setPosSize 0, 50, 700, 500, 15 End Sub
cordialement
michel
Merci MichelJe vais essayer de me débrouiller avec ca.
A+!
Partager