Macros

    From The Document Foundation Wiki
    < Macros‎ | Calc


    Comment copier sans utiliser le presse-papiers ?

    Il est fréquent de copier-coller entre les documents ou à l'intérieur d'un même document.

    On utilise souvent pour cela le dispatcher, avec la possibilité de mémoriser la sélection, la copie et le collage. Mais cela a peut présenter quelques inconvénients :

    • Perte du contenu précédent du presse-papiers.
    • Risque d'utilisation parallèle du copier-coller par l'utilisateur.
    • Laisse le contenu copié dans le presse-papiers.

    Dans certaines limites il est possible de se passer du presse-papiers en utilisant l'API comme le montre l'exemple suivant.

    Principes :

    • Sélection de l'objet à copier.
    • Utilisation de la méthode getTransferable du controller.
    • Sélection de l'objet destination.
    • Utilisation de la méthode insertTransferable du controller.

    L'exemple "tableur" ci-dessous copie la sélection courante et la colle cellule A17 de la feuille "Commandes" du classeur courant :

    option explicit
    
    sub CopierCollerApi
    
    dim PysClasseur as object, PysCopie as object, PysFeuilleDest as object, PysDestination as object
    
    PysClasseur = thisComponent
    PysCopie = PysClasseur.currentController.getTransferable
    PysFeuilleDest = PysClasseur.Sheets.getByName("Commandes")
    PysDestination = PysFeuilleDest.GetCellRangeByName("A17")
    PysClasseur.currentController.select(PysDestination)
    PysClasseur.currentController.insertTransferable(PysCopie)
    
    end sub


    L'exemple "traitement de textes" ci-dessous copie la sélection courante et la colle dans un nouveau document :

    sub CopierCollerApi
    
    dim PysDoc as object, PysCopie as object, PysDestination as object
    
    PysDoc = thisComponent
    PysCopie = PysDoc.currentController.getTransferable
    PysDestination = stardesktop.loadcomponentfromurl("private:factory/swriter", "_blank", 0, array())
    PysDestination.currentController.insertTransferable(PysCopie)
    
    end sub