Macros
TDF LibreOffice Document Liberation Project Blogs communautaires Weblate Nextcloud Redmine Ask LibreOffice Donner
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