Macro pour copier un diagramme fait dans Calc dans un tableau de Writer

Bonjour à tous,
Je suis à la recherche d'une macro ou de piste pouvant réaliser les actions suivantes.
A partir d'un fichier calc existant

  * sélectionner un diagramme
  * copier ce diagramme
  * se positionner dans une case du tableau de Writer déjà existant
  * coller le tableau copié
  * puis l'ancrer comme caractère

je butte principalement sur le fait que l'objet que je sélectionne je ne trouve pas de méthode pour le copier.
Merci pour votre aide à tous.

Bonjour

je butte principalement sur le fait que l'objet que je sélectionne je ne
trouve pas de méthode pour le copier.

d'experience le plus direct pour faire un copier coller par macro est d'abandonner pour une fois l'api et d’utiliser le dispatcher (ie. le code issu de l'enregistreur de macro)

trouve ton objet, fait un select dessus
puis copie paste par dispatcher
(pour le paste, meme, principe, positionner un viewCursor dans le tableau, ou un select de ta cellule cible evrait le faire)

bien entendu, toute autre approche est valable :wink:

laurent

Merci Laurent

j'ai essayé cette méthode, mais je ne trouve pas la façon de rendre actif le diagramme que je veux copier
car l'instruction document = ThisComponent.CurrentController.Frame ne donne que l'objet actif.

Cordialement
Jean Luc

Re

j'ai essayé cette méthode, mais je ne trouve pas la façon de rendre
actif le diagramme que je veux copier
car l'instruction document = ThisComponent.CurrentController.Frame ne
donne que l'objet actif.

as tu essayé
ThisComponent.currentcontroller.select(monDiagramme)

où monDiagramme est l'objet que tu as recupéré avec l'api

Laurent

Merci Laurent,
Mais mes différentes tentatives ont lamentablement échouées
En fin de semaine je vais reprendre ce bout de programme est procéder plus méthodique pour savoir à quel moment je perds l'objet que je veux copier.
car quoi que je fasse je copie toujours ce qui est dans le presse papier et je n'arrive pas à mettre le diagramme dans celui-ci
Cordialement
  Jean Luc

Bonjour

Si tu nommes ton diagramme par clic droit sur le diagramme > Nom, tu peux
y accéder (relativement) simplement de cette façon (le diagramme cherché
a été nommé "test" dans cet exemple) :

sub PysCopierGraphe

dim oClasseur as Object, oFeuille as Object, oShape as object
dim document as object, dispatcher as object
dim iNbShape as integer

oClasseur = thisComponent
oFeuille = oClasseur.sheets.getByName("Feuille1")

for iNbShape = 0 to oFeuille.DrawPage.count - 1
        oShape = oFeuille.DrawPage.getByIndex(iNbShape)
        if oShape.name = "test" then
      thiscomponent.currentcontroller.select(oshape)
      document = ThisComponent.CurrentController.Frame
      dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
      dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
                exit for
        end if
next iNbShape

end sub

Cordialement
Pierre-Yves

Merci Pierre-Yves,
Je vais le tester en fin de semaine
Cordialement
Jean Luc