[Résolu][Basic] Routine pour manipuler les 4 applications
Modérateur : Vilains modOOs
Règles du forum
Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
-
- InconditiOOnnel
- Messages : 753
- Inscription : 09 avr. 2013 07:15
- Localisation : T'as pas dit bonjour, merci et à bientot !
[Résolu][Basic] Routine pour manipuler les 4 applications
Bonjour à tous,
Je cherche UN EXEMPLE de code bien commenté,
qui détaillerai, qui montrerai comment
OUVRIR
, lancer la macro afficher hello_world sur l'application distante,
FERMER, l'aplication distante
pour chaque application de la suite libre office.
Merci et à bientôt !
Je cherche UN EXEMPLE de code bien commenté,
qui détaillerai, qui montrerai comment
OUVRIR
, lancer la macro afficher hello_world sur l'application distante,
FERMER, l'aplication distante
pour chaque application de la suite libre office.
Merci et à bientôt !
Dernière modification par martinbrait le 11 août 2018 21:33, modifié 1 fois.
LibreOffice version 5.4.7.2.M6 (x64)
Windows 10
+
LibreOffice version 5.4.7.2.M6 (x64)
Windows 7
#HSQL Database Engine 1.8.0
version=1.8.0
Locale : fr-FR (fr_FR)
Obligation de version
Bonjour, merci et à bientôt !
Windows 10
+
LibreOffice version 5.4.7.2.M6 (x64)
Windows 7
#HSQL Database Engine 1.8.0
version=1.8.0
Locale : fr-FR (fr_FR)
Obligation de version
Bonjour, merci et à bientôt !
-
- GourOOu
- Messages : 5622
- Inscription : 25 nov. 2011 18:07
- Localisation : Guyane
Re: [Basic] Routine pour manipuler les 4 applications
Bonjour
Pour ce qui est de l'ouverture et de la fermeture d'un document tu as des exemples à foison sur le Forum.
Comme tu veux exécuter une macro, tu dois ouvrir le document en autorisant l'exécution des macros.
Pour ce qui est de l'exécution de la macro proprement dite, relis la Bible : Techniques avancées > Utiliser le Dispatcher.
A+
Pour ce qui est de l'ouverture et de la fermeture d'un document tu as des exemples à foison sur le Forum.
Comme tu veux exécuter une macro, tu dois ouvrir le document en autorisant l'exécution des macros.
Pour ce qui est de l'exécution de la macro proprement dite, relis la Bible : Techniques avancées > Utiliser le Dispatcher.
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
-
- InconditiOOnnel
- Messages : 753
- Inscription : 09 avr. 2013 07:15
- Localisation : T'as pas dit bonjour, merci et à bientot !
Re: [Basic] Routine pour manipuler les 4 applications
Ok Piaf,
Merci de m'orienter sur le chapitre du Dispatcher, correspondant à ce besoin.
Je vais donc progresser encore sur ce point, et tâcherai de publier un exemple.
Merci beaucoup !
Merci de m'orienter sur le chapitre du Dispatcher, correspondant à ce besoin.
Je vais donc progresser encore sur ce point, et tâcherai de publier un exemple.
Merci beaucoup !
LibreOffice version 5.4.7.2.M6 (x64)
Windows 10
+
LibreOffice version 5.4.7.2.M6 (x64)
Windows 7
#HSQL Database Engine 1.8.0
version=1.8.0
Locale : fr-FR (fr_FR)
Obligation de version
Bonjour, merci et à bientôt !
Windows 10
+
LibreOffice version 5.4.7.2.M6 (x64)
Windows 7
#HSQL Database Engine 1.8.0
version=1.8.0
Locale : fr-FR (fr_FR)
Obligation de version
Bonjour, merci et à bientôt !
-
- GourOOu
- Messages : 5622
- Inscription : 25 nov. 2011 18:07
- Localisation : Guyane
Re: [Basic] Routine pour manipuler les 4 applications
Re
A+
J'ai un gros doute sur le fait que ton exemple soit plus pertinent que celui proposé par les auteurs du livre en question.martinbrait a écrit : et tâcherai de publier un exemple.
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
-
- InconditiOOnnel
- Messages : 753
- Inscription : 09 avr. 2013 07:15
- Localisation : T'as pas dit bonjour, merci et à bientot !
Re: [Basic] Routine pour manipuler les 4 applications
Répondant au besoin, et publié, ici, par souci de rassembler ce qui est épars, sans nuire aux auteurs.
' Pour ouvrir un classeur calc :'
'Pour ouvrir un document ou un répertoire :
'Le fichier s'ouvrira ensuite avec le programme par défaut
'défini par le système d'exploitation.
'Par exemple :
' est susceptible de s'ouvrir sous Excel même si Calc est déjà ouvert.
'Une solution pour manipuler malgré tout un tableau .xls est de passer par StarDesktop,
'qui lancera le fichier désiré via Calc quels que soient les paramètres de l'OS sur lequel on exécute la macro :
'créer un document writer et le positionner
'Auteur : Dude
'interaction calc->writer
'copier-coller un tableau calc formaté, recréé sous writer (sans liaison DDE)
'auteur : Piaf
'Ouvrir une source de données enregistrée, et lancer une requête.
'Auteur : SilkyRoad
Ouvrir une base (avec source de données non enregistrée).
'Auteur : SilkyRoad
'créer une présentation impress, en y disposant des images
'Auteur : Pierre-Yves SAMIN
'ouvrir et fermer draw
' Pour ouvrir un classeur calc :'
Code : Tout sélectionner
Sub OuvrirUnClasseurCalc
oDoc = StarDesktop.loadComponentFromURL( "private:factory/scalc", "_blank", 0, Array() )
End Sub
Code : Tout sélectionner
sub Ouvrir
xShell = createUnoService("com.sun.star.system.SystemShellExecute")
xShell.execute("c:\Users\Admin\Desktop\", "", 0)
End Sub
'défini par le système d'exploitation.
'Par exemple :
Code : Tout sélectionner
Sub OuvrirAvecTableurXlsOuCalcSelonSystemeParDefaut()
xShell.execute("c:\Users\Admin\Desktop\Importations.xls", "", 0)
End Sub
'Une solution pour manipuler malgré tout un tableau .xls est de passer par StarDesktop,
'qui lancera le fichier désiré via Calc quels que soient les paramètres de l'OS sur lequel on exécute la macro :
Code : Tout sélectionner
Sub RécupérerTableau
Dim Fichier As String
Dim Array() As Variant
Dim classeur, feuilles, feuille1 As Object
Fichier = "c:\Users\Admin\Desktop\Importations.xls"
Fichier = ConvertToURL(Fichier)
classeur = StarDesktop.LoadComponentFromURL(Fichier , "_blank", 0, Array())
feuilles = Classeur.Sheets
feuille1 = feuilles.getByName("Feuille1")
msgbox (feuille1.getCellByPosition(1,1).string)
classeur.close(true)
End Sub
'créer un document writer et le positionner
'Auteur : Dude
Code : Tout sélectionner
Sub NewD
Dim MonDocument As Object
Dim AdresseDoc As String
Dim PropFich()
AdresseDoc = "private:factory/swriter"
MonDocument = StarDesktop.LoadComponentFromURL(AdresseDoc,"_blank",0, PropFich)
call CTPF
End Sub
Sub CTPF
dim oCadre as Object
dim oFenetre as Object
dim oRect as Object
dim nHauteur as Integer
dim nLargeur as Integer
dim nPosX as Integer
dim nPosY as Integer
oCadre = StarDesktop.getCurrentFrame()
oFenetre = oCadre.getContainerWindow()
oRect = oFenetre.getPosSize()
'nPosX = oRect.X
'nPosY = oRect.Y
nPosX = 950
nPosY = 0
nHauteur = 950
nLargeur = 900
oFenetre.setPosSize(nPosX, nPosY, nLargeur, nHauteur, 15)
End Sub
'copier-coller un tableau calc formaté, recréé sous writer (sans liaison DDE)
'auteur : Piaf
Code : Tout sélectionner
Sub Main
Dim oDocC as Object, maFeuille as Object, Curseur as Object
Dim oDocW as Object
Dim monTexte As Object, maTable As Object
oDocC = thisComponent
maFeuille = oDocC.CurrentController.ActiveSheet
Curseur = maFeuille.CreateCursor
Curseur.goToEndOfUsedArea(False)
nbCol = Curseur.rangeAddress.EndColumn
nbRow = Curseur.RangeAddress.EndRow
oDocW = StarDesktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, Array())
oDocW.lockControllers
monTexte = oDocW.Text
Curseur = monTexte.createTextCursor
maTable = oDocW.createInstance("com.sun.star.text.TextTable")
maTable.initialize(nbRow + 1,nbCol + 1)
monTexte.insertTextContent(Curseur, maTable, False)
maZone = maFeuille.getCellRangeByPosition(0,0,nbCol,nbRow)
lesSep = maTable.TableColumnSeparators
largeur = MaTable.TableColumnRelativeSum
For i = 0 to UBound(lesSep)
If i = 0 Then
lesSep(i).Position = largeur * 0.25
Else
lesSep(i).Position = lesSep(i - 1).Position + largeur * 0.11
End If
Next i
maTable.TableColumnSeparators = lesSep
lesStyles = oDocW.StyleFamilies
unStyle = lesStyles.getByName("ParagraphStyles")
monStyle = oDocW.createInstance("com.sun.star.style.ParagraphStyle")
unStyle.insertByName ("monTabStyleA", monStyle)
monStyle.ParentStyle = "Standard"
With monStyle
.CharFontName = "Liberation Serif"
.CharHeight = 10
.paraAdjust = 1
End With
monStyle = oDocW.createInstance("com.sun.star.style.ParagraphStyle")
unStyle.insertByName ("monTabStyleB", monStyle)
monStyle.ParentStyle = "monTabStyleA"
monStyle.paraAdjust = 3
monStyle = oDocW.createInstance("com.sun.star.style.ParagraphStyle")
unStyle.insertByName ("monTabStyleAutre", monStyle)
monStyle.ParentStyle = "monTabStyleB"
monStyle.CharWeight = 150
For nRow = 1 To maTable.getRows().getCount() - 1
For nCol = 0 To maTable.getColumns().getCount() - 1
oCell = maTable.getCellByPosition(nCol, nRow)
Select Case nCol
Case 0
oCell.BackColor = RGB(187,255,187)
SetParStyle(oCell.getText(), "monTabStyleA")
Case 1
oCell.BackColor = RGB(198,236,255
SetParStyle(oCell.getText(), "monTabStyleB")
Case 2
oCell.BackColor = RGB(255,215,255)
SetParStyle(oCell.getText(), "monTabStyleAutre")
Case 3
oCell.BackColor = RGB(255,187,221)
SetParStyle(oCell.getText(), "monTabStyleAutre")
Case 4
oCell.BackColor = RGB(230,204,255)
SetParStyle(oCell.getText(), "monTabStyleAutre")
Case 5
oCell.BackColor = RGB(226,226,197)
SetParStyle(oCell.getText(), "monTabStyleAutre")
Case 6
oCell.BackColor = RGB(255,216,176)
SetParStyle(oCell.getText(), "monTabStyleAutre")
Case 7
oCell.BackColor = RGB(226,226,197)
SetParStyle(oCell.getText(), "monTabStyleAutre")
End Select
Next nCol
Next nRow
Donnees = maZone.DataArray
maTable.DataArray = Donnees
cursCell = maTable.createCursorByCellName("B1")
cursCell.goRight(6, True)
cursCell.mergeRange
oDocW.unlockControllers
maCellule = maTable.getCellByName("A1")
monTexte = maCellule.Text
monCurseur = monTexte.createTextCursor
curseurVisible = oDocW.CurrentController.ViewCursor
curseurVisible.gotoRange(monCurseur, False)
End Sub
'Ouvrir une source de données enregistrée, et lancer une requête.
'Auteur : SilkyRoad
Code : Tout sélectionner
Sub RequeteBase_V01
Dim oDBContext As Object , oDB As Object , oBase As Object
Dim oStatement As Object , oRequete As Object
Dim strSQL As String
oDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
'Connexion à la base de données enregistrée "Bibliography"
'(Base démo fournie dans le pack d'installation Open Office)
'Une base est dite enregistrée lorsque vous pouvez la visualiser
'en utilisant le menu Afficher/Sources de données(ou par la touche raccourci F4).
'Pour enregistrer une base :
'Menu Outils
'Options
'Sélectionnez "Base" dans l'arborescence
'Double cliquez sur "Bases de données"
'Cliquez sur le bouton "Nouveau"
'Utilisez le bouton "Parcourir" pour rechercher la base sur le disque
'Puis Validez en cliquant sur OK dans toutes les boîtes de dialogue.
oDB = oDBContext.getbyName("Bibliography")
'Si la base est protégée par un mot de passe, utilisez
'oBase = oDB.getConnection("Login", "MotDePasse")
oBase = oDB.getConnection("","")
oStatement = oBase.createStatement()
strSQL = "SELECT ""Identifier"",""Publisher"",""ISBN"" FROM ""biblio"" " & _
"WHERE ""Author""='Böhm, Franz'"
oRequete = oStatement.executeQuery( strSQL )
If Not IsNull(oRequete) Then
While oRequete.next
MsgBox oRequete.getString(1) & " / " & _
oRequete.getString(2) & " / " & oRequete.getString(3)
Wend
End If
oRequete.Close
oStatement.Close
oBase.Close
oBase.Dispose
End Sub
Ouvrir une base (avec source de données non enregistrée).
'Auteur : SilkyRoad
Code : Tout sélectionner
Sub RequeteBase_V02
Dim oDBContext As Object , oDB As Object , oBase As Object
Dim oStatement As Object , oRequete As Object
Dim strSQL As String , Fichier As String
Fichier = ConvertToURL("C:\Documents and Settings\mimi\dossier\OOoBase.odb")
oDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
oDB = oDBContext.getbyName(Fichier)
oBase = oDB.getConnection("","")
oStatement = oBase.createStatement()
strSQL = "SELECT ""ID"",""Champ1"",""Champ2"" FROM ""maTable"" " & _
"WHERE ""Champ2""=12345"
oRequete = oStatement.executeQuery( strSQL )
If Not IsNull(oRequete) Then
While oRequete.next
MsgBox oRequete.getString(1) & " / " & _
oRequete.getString(2) & " / " & oRequete.getString(3)
Wend
End If
oRequete.Close
oStatement.Close
oBase.Close
oBase.Dispose
End Sub
'Auteur : Pierre-Yves SAMIN
Code : Tout sélectionner
Sub CreerPresentation
Dim oDoc As Object , oPage As Object
Dim Arg() As Variant
'Creation présentation
oDoc = StarDesktop.loadComponentFromURL( "private:factory/simpress", "_blank", 0, Arg() )
'---
'Spécifie la premiere page (qui est automatiquement créée en même
'temps que la nouvelle présentation).
oPage = oDoc.DrawPages.getByIndex(0)
'Renomme la page
oPage.Name = "DVP 1"
AjoutImage ( oDoc , oPage , "http://www.developpez.com/template/logo.gif" , _
6500 , 3500 , 500 , 500, "NomImage1" )
AjoutTexte ( oDoc , oPage , "Bienvenue à vous !" , _
14000 , 2500 , 7000 , 6000 , RGB(235,235,180) )
'---
'--- Ajoute une deuxième page ---
oPage = oDoc.DrawPages.insertNewByIndex(1) '(1) correspond à l'index de la 2eme page
oPage.Name = "DVP 2"
AjoutImage ( oDoc , oPage , "http://www.developpez.com/template/logo.gif" , _
6500 , 3500 , 500 , 500, "NomImage2" )
AjoutTexte ( oDoc , oPage , "J'espère que cet exemple vous aura aidé..." , _
14000 , 3000 , 7000 , 6000 , RGB(235,235,180) )
'---
'Démarre la présentation en mode plein ecran
oDoc.Presentation.Start
End Sub
Function AjoutImage( oCmp As Object , oPge As Object , Fichier As String , Largeur As Long , _
Hauteur As Long , Verti As Long , Horiz As Long, PysNomImage as string )
Dim oImage As Object
Dim oSize As New com.sun.star.awt.Size
Dim oPos As New com.sun.star.awt.Point
'--- insère une image, la redimensionne et la positionne et la page ---
'(Cet exemple nécessite d'être connecté à internet pour récupérer l'image)
oImage = oCmp.createInstance("com.sun.star.drawing.GraphicObjectShape")
oImage.GraphicURL = ConvertToURL(Fichier)
'Ajoute l'image
oPge.Add(oImage)
'Définit la taille
oSize.Width = Largeur
oSize.Height = Hauteur
oImage.Size = oSize
'Définit la Position
oPos.x = Horiz
oPos.y = Verti
oImage.Position = oPos
oImage.Name=PysNomImage
End Function
Function AjoutTexte( oCmp As Object , oPge As Object , leTexte As String , Largeur As Long , _
Hauteur As Long , Verti As Long , Horiz As Long , Couleur As Long)
Dim oShape As Object
Dim oSize As New com.sun.star.awt.Size
Dim oPos As New com.sun.star.awt.Point
'--- insère une zone de texte , la redimensionne et la positionne et la page ---
oShape = oCmp.createInstance("com.sun.star.drawing.TextShape")
'Définit la taille
oSize.Width = Largeur
oSize.Height = Hauteur
oShape.Size = oSize
'Définit la Position
oPos.x = Horiz
oPos.y = Verti
oShape.Position = oPos
'Définit la couleur de fond pour la zone de texte
oShape.FillStyle = com.sun.star.drawing.FillStyle.SOLID
oShape.FillColor = Couleur
'Ajoute la zone de texte
oPge.Add(oShape)
'insère le texte
oShape.getText().setString( leTexte )
oShape.getText().CharHeight = 40 'taille caractères
End Function
sub PysRazImage
dim i as integer, PysPage as object
PysPage = thiscomponent.drawpages.getByName("DVP 2")
for i = PysPage.count - 1 to 0 step -1
if PysPage.getbyIndex(i).Name = "NomImage2" then
PysPage.getbyIndex(i).dispose
end if
next i
end sub
'ouvrir et fermer draw
Code : Tout sélectionner
Sub OuvrirEtFermerDraw
Dim jDoc as Object, jStyle as Object
jDoc = StarDesktop.LoadComponentFromURL("private:factory/sdraw","_blank",0, Array())
'Wait 5000 ' le reste du programme
MsgBox "documentdraw ouvert"
'fermer draw
jDoc.Close(True)
End Sub
LibreOffice version 5.4.7.2.M6 (x64)
Windows 10
+
LibreOffice version 5.4.7.2.M6 (x64)
Windows 7
#HSQL Database Engine 1.8.0
version=1.8.0
Locale : fr-FR (fr_FR)
Obligation de version
Bonjour, merci et à bientôt !
Windows 10
+
LibreOffice version 5.4.7.2.M6 (x64)
Windows 7
#HSQL Database Engine 1.8.0
version=1.8.0
Locale : fr-FR (fr_FR)
Obligation de version
Bonjour, merci et à bientôt !