i

Comment ouvrir un document dans son application par défaut


source : https://wiki.documentfoundation.org/Macros/General/001/fr


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 :

Ouverture du document dans son application (ici page Web)


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


Notes :

1. ? 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.

2. ? Voir la documentation de l'API



Télécharger une base exemple


Télécharger un classeur exemple