[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 !
Avatar de l’utilisateur
martinbrait
InconditiOOnnel
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

Message par martinbrait »

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 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 !
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Basic] Routine pour manipuler les 4 applications

Message par Piaf »

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.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Avatar de l’utilisateur
martinbrait
InconditiOOnnel
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

Message par martinbrait »

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.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 !
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Basic] Routine pour manipuler les 4 applications

Message par Piaf »

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.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Avatar de l’utilisateur
martinbrait
InconditiOOnnel
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

Message par martinbrait »

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

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

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

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

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
'interaction calc->writer
'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
'créer une présentation impress, en y disposant des images
'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 !