Si vous souhaitez depuis MS Word piloter LO/AOO sous MacOS voyez le sujet 3
Si vous souhaitez depuis MS Word piloter LO/AOO, sous Windows voyez le sujet 4
Sujet 1 : Comment piloter, sous MacOS, des applications depuis LO/Aoo
C'est possible sous MacOSX pour les applications "scriptables".
Voici un dossier qui contient cinq fichiers :
- Piloter_depuis_LO.odt, Document_macros.docm et Classeur_macros.xlsm doivent être dans le même dossier,
- PiloterW.scpt et dmaths_W.icns doivent être dans /Users/%USER%/Library/Application Scripts/com.microsoft.Word
La transposition pour OOo ne devrait pas poser de problème.
Comme il n'est pas possible de lancer, avec AppleScript une macro Word avec paramètre, le problème est contourné en créant des variables dans le document actif de Word. Par contre, il est possible de lancer une macro Excel avec paramètres.
L'enchaînement ci-dessous permet de lancer des fonctions dans MS Word ou Excel ET de récupérer les valeurs de retour.
On utilise principalement deux macros basic :
Code : Tout sélectionner
Function RunVBMacroMac(MonAppli As String, MacroName As String, Optional mesParametres As String) As Variant
If MonAppli = "Excel" Then
Script = "tell application ""Microsoft Excel"" to run VB macro """ & MacroName & """"
If Not IsMissing(mesParametres) Then
mesParam = Split(mesParametres, "$")
For I = 0 To Ubound(mesParam)
Script = Script & " arg" & Cstr(I+1) & " """ & mesParam(I) & """"
Next I
Endif
ElseIf MonAppli = "Word" Then
Script = "tell application ""Microsoft Word""" & Chr(10)
If Not IsMissing(mesParametres) Then
mesParam = Split(mesParametres, "$")
For I = 0 To Ubound(mesParam)
Script = Script & " tell active document to delete variable ""Var" & Cstr(I+1) & """" & Chr(10)
Script = Script & " tell active document to make new variable at it with properties {name:""Var" & Cstr(I+1) _
& """, variable value:""" & mesParam(I) & """}" & Chr(10)
Next I
Endif
Script = Script & " run VB macro macro name """ & MacroName & """" & Chr(10) _
& " tell active document to get variable value of variable ""SortieWord""" & Chr(10) _
& "end tell"
End If
RunVBMacroMac = Run_Applescript(script)
End Function
Function Run_Applescript(monScript As String, Optional maFonction As String, Optional mesParametres As String, Optional bBoolean As Boolean) As Variant
Dim iNbreDonnees As Integer
Dim data() As Variant
Dim Resul As Variant
If IsMissing(bBoolean) Then bBoolean = False
If monScript = "Word" Then monScript = "/Users/" & environ("USER") & "/Library/Application Scripts/com.microsoft.Word/PiloterW.scpt"
If monScript = "Excel" Then monScript = "/Users/" & environ("USER") & "/Library/Application Scripts/com.microsoft.Excel/PiloterX.scpt"
If IsMissing(maFonction) And IsMissing(mesParametres) Then
iNbreDonnees = 0
data = Array(monScript)
ElseIf (Not IsMissing(maFonction) And IsMissing(mesParametres)) Then
iNbreDonnees = 1
Redim data(iNbreDonnees)
data(0)= monScript
data(1)= maFonction
ElseIf (IsMissing(maFonction) And Not IsMissing(mesParametres)) Then
mesParam = Split(mesParametres, "$")
iNbreDonnees = Ubound(mesParam) + 1
Redim data(iNbreDonnees)
data(0) = monScript
For I = 1 To Ubound(data)
data(I) = mesParam(I-1)
Next I
Else
mesParam = Split(mesParametres, "$")
iNbreDonnees = Ubound(mesParam) + 2
Redim data(iNbreDonnees)
data(0) = monScript
data(1)= maFonction
For I = 2 To Ubound(data)
data(I) = mesParam(I-2)
Next I
Endif
Resul = SimpleScript("run_applescript", data)
If bBoolean Then
Run_Applescript = CBool(Resul)
Else
Run_Applescript = Resul
Endif
End Function
Code : Tout sélectionner
def run_applescript(script, *args, **kwargs):
import os, subprocess
cmd = ['/usr/bin/osascript', '-l', kwargs.get('lang', 'AppleScript')]
if os.path.exists(script):
cmd += [script]
else:
cmd += ['-e', script]
cmd.extend(args)
try:
return str(subprocess.check_output(cmd, **kwargs))[2:-3]
except:
None
- en direct un applescript comme
Code : Tout sélectionner
"tell application ""Microsoft Word"" to get version"
Code : Tout sélectionner
on run argv
set MyFonction to item 1 of argv
if MyFonction = "NbreDocsWord" then NbreDocsWord()
end run
on NbreDocsWord()
if Is_Running("Microsoft Word") then
set nbredoc to 1
repeat while exists document of window nbredoc of application "Microsoft Word"
set nbredoc to nbredoc + 1
end repeat
set nbredoc to nbredoc - 1
else
set nbredoc to 0
end if
return nbredoc
end NbreDocsWord