[Résolu][Basic] Routine pour manipuler les 4 applications

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur: Vilains modOOs

Règles du forum
:alerte: 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 !

[Résolu][Basic] Routine pour manipuler les 4 applications

Messagepar martinbrait » 04 Août 2018 13:18

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 !
Dernière édition par martinbrait le 11 Août 2018 22:33, édité 1 fois.
LibreOffice version 5.1.6.2
Windows 10
+
LibreOffice version 4.3.6.2.0
Windows 7

#HSQL Database Engine 1.8.0
version=1.8.0


Bonjour, merci et à bientôt !
Avatar de l’utilisateur
martinbrait
PassiOOnné
PassiOOnné
 
Message(s) : 742
Inscrit le : 09 Avr 2013 08:15
Localisation : T'as pas dit bonjour, merci et à bientot !

Re: [Basic] Routine pour manipuler les 4 applications

Messagepar Piaf » 04 Août 2018 14:08

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+
Libre Office Version: 6.0.7 et Apache OpenOffice 4.1.5 Sur Xubuntu 18.04 AMD64
Piaf
GourOOu
GourOOu
 
Message(s) : 5427
Inscrit le : 25 Nov 2011 19:07
Localisation : Guyane

Re: [Basic] Routine pour manipuler les 4 applications

Messagepar martinbrait » 04 Août 2018 14:18

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 !
LibreOffice version 5.1.6.2
Windows 10
+
LibreOffice version 4.3.6.2.0
Windows 7

#HSQL Database Engine 1.8.0
version=1.8.0


Bonjour, merci et à bientôt !
Avatar de l’utilisateur
martinbrait
PassiOOnné
PassiOOnné
 
Message(s) : 742
Inscrit le : 09 Avr 2013 08:15
Localisation : T'as pas dit bonjour, merci et à bientot !

Re: [Basic] Routine pour manipuler les 4 applications

Messagepar Piaf » 04 Août 2018 17:36

Re
martinbrait a écrit: et tâcherai de publier un exemple.
J'ai un gros doute sur le fait que ton exemple soit plus pertinent que celui proposé par les auteurs du livre en question.
A+
Libre Office Version: 6.0.7 et Apache OpenOffice 4.1.5 Sur Xubuntu 18.04 AMD64
Piaf
GourOOu
GourOOu
 
Message(s) : 5427
Inscrit le : 25 Nov 2011 19:07
Localisation : Guyane

Re: [Basic] Routine pour manipuler les 4 applications

Messagepar martinbrait » 11 Août 2018 22:33

Répondant au besoin, et publié, ici, par souci de rassembler ce qui est épars, sans nuire aux auteurs.

' Pour ouvrir un classeur calc :'
Code : Tout sélectionner   AgrandirRéduire
Sub OuvrirUnClasseurCalc
oDoc = StarDesktop.loadComponentFromURL( "private:factory/scalc", "_blank", 0, Array() )
End Sub


'Pour ouvrir un document ou un répertoire :
Code : Tout sélectionner   AgrandirRéduire
sub Ouvrir
xShell = createUnoService("com.sun.star.system.SystemShellExecute")
xShell.execute("c:\Users\Admin\Desktop\", "", 0)
End Sub


'Le fichier s'ouvrira ensuite avec le programme par défaut
'défini par le système d'exploitation.
'Par exemple :
Code : Tout sélectionner   AgrandirRéduire
Sub  OuvrirAvecTableurXlsOuCalcSelonSystemeParDefaut()
xShell.execute("c:\Users\Admin\Desktop\Importations.xls", "", 0)
End Sub


' 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 :


Code : Tout sélectionner   AgrandirRéduire
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   AgrandirRéduire
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


'interaction calc->writer
'copier-coller un tableau calc formaté, recréé sous writer (sans liaison DDE)
'auteur : Piaf

Code : Tout sélectionner   AgrandirRéduire
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   AgrandirRéduire
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   AgrandirRéduire
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


'créer une présentation impress, en y disposant des images
'Auteur : Pierre-Yves SAMIN

Code : Tout sélectionner   AgrandirRéduire
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   AgrandirRéduire
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.1.6.2
Windows 10
+
LibreOffice version 4.3.6.2.0
Windows 7

#HSQL Database Engine 1.8.0
version=1.8.0


Bonjour, merci et à bientôt !
Avatar de l’utilisateur
martinbrait
PassiOOnné
PassiOOnné
 
Message(s) : 742
Inscrit le : 09 Avr 2013 08:15
Localisation : T'as pas dit bonjour, merci et à bientot !


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 3 invité(s)