Macros

From The Document Foundation Wiki
< Macros‎ | Calc
Jump to: navigation, search

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