Macros
TDF LibreOffice Document Liberation Project Blogs communautaires Weblate Nextcloud Redmine Ask LibreOffice Donner
Comment ouvrir un document dans son application par défaut ?
On gére des Url [1]et on souhaite ouvrir les objets correspondants (documents, dossier, page Web, etc.) dans leur application par défaut (LibreOffice, lecteur PDF, explorateur, navigateur, etc.).
Depuis un formulaire
Les contrôles Bouton disposent d'une propriété Action que l'on peut définir à Ouvrir la page web. Si l'interface de l'application utilise un formulaire on peut :
- inclure un tel bouton,
- définir sa propriété Action à Ouvrir la page web,
- et "récupérer" l'Url à ouvrir dans un autre contrôle, une zone de texte par exemple comme ci-dessous :
Dans ce formulaire le contrôle zone de texte affichant l'Url est nommé txtUrl. Il suffit d'associer à l'événement Accepter l'action du bouton une procédure du type :
Sub LibOModifierBtn(LibOEvent)
with LibOEvent.Source.Model
.TargetURL = convertToUrl(.Parent.getByName("txtUrl").Text)
end with
End Sub
- L'événement LibOEvent, passé lors de l'exécution, permet de "remonter" à l'élément parent (le formulaire) et ainsi d'accéder à la propriété Text du contrôle zone de texte txtUrl.
- La fonction convertToUrl convertit le texte au format Url
- Le résultat est assigné comme cible (TargetURL) à l'action Ouvrir la page web du bouton.
Hors formulaire
Si l'ouverture du document n'est pas déclenchée par un bouton, on peut utiliser le service SystemShellExecute[2] qui attend trois paramètres :
- Command : la commande à exécuter (l'Url par exemple)
- Parameter : paramètre(s) facultatif(s) utilisé(s) par la commande
- Flags : "drapeau" permettant de contrôler l'exécution de la commande, notamment pour éviter d'afficher un message d'erreur dans certains cas.
Exemple d'ouverture d'une page Web :
Sub LibOSystemShellDefaut
dim LibOUrl as string
dim LibOFlags as long
dim LibOService as object
LibOUrl = convertToUrl("http://api.libreoffice.org/common/ref/com/sun/star/system/XSystemShellExecute.html")
LibOFlags = com.sun.star.system.SystemShellExecuteFlags.DEFAULTS
LibOService = CreateUnoService("com.sun.star.system.SystemShellExecute")
LibOService.execute(LibOUrl, "", LibOFlags)
End sub
Exemple de mise en œuvre de la gestion d'erreur :
Sub LibOSystemShellGererErreur
dim LibOUrl as string
dim LibOFlags as long
dim LibOService as object
on error goto LibOSystemShell_Err
LibOUrl = convertToUrl("c:\classeur.ods")
LibOFlags = com.sun.star.system.SystemShellExecuteFlags.NO_SYSTEM_ERROR_MESSAGE
LibOService = CreateUnoService("com.sun.star.system.SystemShellExecute")
LibOService.execute(LibOUrl, "", LibOFlags)
' Autres exemples d'utilisation (Windows)
'LibOService.execute("notepad", "c:\liste.txt", LibOFlags) '<= Ouvre le fichier dans notepad
'LibOService.execute("c:\", "", LibOFlags) '<= Ouvre l'explorateur sur le dossier indiqué
LibOSystemShell_Exit:
exit sub
LibOSystemShell_Err:
select case err
case 1
msgbox "Exécution impossible (Url non valide par exemple)", 16, "Shell"
case else
msgbox "Erreur non prévue", 16, "Shell"
end select
resume LibOSystemShell_Exit
End sub
Utiliser le "drapeau" NO_SYSTEM_ERROR_MESSAGE empêche le système d'afficher son propre message :
- Avec le paramètre DEFAULTS Windows, par exemple, afficherait Windows ne trouve pas 'classeur.ods'...
- Avec le paramètre NO_SYSTEM_ERROR_MESSAGE ce message est inhibé et il est possible de créer sa propre routine de gestion d'erreur.
Notes :
- ↑ Un URL (Uniform Resource Locators) indique l'adresse d'un document ou d'un serveur sur Internet, sur un réseau ou un disque. La structure générale d'un URL varie selon son type et se présente généralement sous la forme : Service://nom_hôte:Port/Chemin/Page#Marque (parfois, certains éléments ne sont pas nécessaires). Un URL peut être une adresse FTP, une adresse Internet (HTTP), une adresse de fichier ou une adresse e-mail.
- ↑ Voir la documentation de l'API