Macros

    From The Document Foundation Wiki


    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 :
    copie d'écran formulaire
    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

    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 :

    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