Ci-joint un exemple de procédure que j'utilise pour copier un diagramme dans un tableau de writer à la position que je veux.
remarque il largement perfectible de plus j'appelle d'autre procédure qui sont suffisamment explicite pour être remplacer par des lignes de codes adéquate et il reste la définition de l'ancrage que je n'arrive pas à faire.
Attention aux ouverture et fermeture de fichier elle rende active le document
Cordialement
Jean Luc
Sub CopierUnDiagrammeDansUnTableauDUnePage(oMonDocumentCUDDUP,NomFeuilleDiagrammeCUDDUP,nomFEUILLEdonneeCUDDUP,_
NOMdiagrameCUDDUP,oMonDocumentTexteCUDDUP,NomDuTableauCUDDUP,PositionDeLaCopieDansLeTableauCUDDUP,statutCUDDUP)
Dim oMonDiagrammeCUDDUP, oLeDiagrammeCUDDUP, oLesFeuillesCUDDUP,oMaFeuilleCUDDUP, FenetreSelectionnerCUDDUP As Object
Dim oMonTableauCUDDUP As Object
Dim ServiceCUDDUP, PositionDuCurseurDansLeTableauCUDDUP, NomDuFichierCalcCUDDUP As String
Dim LeDiagrammeExisteCUDDUP As Boolean
Dim oDispatchHelperCUDDUP As Object
' dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
Dim ArgsCUDDUP(0) as new com.sun.star.beans.PropertyValue
dim PysDoc,PysCopie as object, PysDestination, oDocCtrl, oDocFrame, oDrawDoc, oDrawPage , oDrawDocCtrl, oDrawDocFrame as object
Dim NiveauDebugCUDDUP, NbrDeDiagrammeCUDDUP,DeplacementHorizontalCUDDUP, DeplacementVerticalCUDDUP As Integer
NiveauDebugCUDDUP=1
MessageDebug(NiveauDebugCUDDUP,3,582,"CopierUnDiagrammeDansUnePage")
NomDuFichierCalcCUDDUP = oMonDocumentCUDDUP.Location 'l'argument n'est pas facultatif
If NOMdiagrameCUDDUP="" Then
NOMdiagrameCUDDUP="Object 1"
End If
' On Error Goto errmodifCUDDUP
oMaFeuilleCUDDUP = oMonDocumentCUDDUP.sheets.getByName(NomFeuilleDiagrammeCUDDUP)
For NbrDeDiagrammeCUDDUP = 0 to oMaFeuilleCUDDUP.DrawPage.count - 1
oMonDiagrammeCUDDUP = oMaFeuilleCUDDUP.DrawPage.getByIndex(NbrDeDiagrammeCUDDUP)
If oMonDiagrammeCUDDUP.name = NOMdiagrameCUDDUP Then
thiscomponent.currentcontroller.select(oMonDiagrammeCUDDUP)
oLeDiagrammeCUDDUP = ThisComponent.CurrentController.Frame
oDispatchHelperCUDDUP = createUnoService("com.sun.star.frame.DispatchHelper")
oDispatchHelperCUDDUP.executeDispatch(oLeDiagrammeCUDDUP , ".uno:Copy", "", 0, Array())
NbrDeDiagrammeCUDDUP = oMaFeuilleCUDDUP.DrawPage.count - 1
Else
If NbrDeDiagrammeCUDDUP = oMaFeuilleCUDDUP.DrawPage.count - 1 Then
MessageDebug(NiveauDebugCUDDUP,1,605,"CopierUnDiagrammeDansUnePage",Array("nom du diagramme selectionné ",oMonDiagrammeCUDDUP.name ,"nom du diagramme à trouver ", NOMdiagrameCUDDUP)
End If
End If
Next NbrDeDiagrammeCUDDUP
EnregistrerEtFermer(oMonDocumentCUDDUP)
EnregistrerE(oMonDocumentTexteCUDDUP)
oMonTableauCUDDUP = oMonDocumentTexteCUDDUP.createInstance("com.sun.star.text.TextTable")
oMonTableauCUDDUP = FindObjectByName(oMonDocumentTexteCUDDUP.TextTables,NomDuTableauCUDDUP, "com.sun.star.text.TextTable")
ThisComponent.CurrentController.Select(oMonTableauCUDDUP)
dim document as object
document = ThisComponent.CurrentController.Frame
Dim CurseurVisible, CurseurVisible2 As Object
CurseurVisible=oMonDocumentTexteCUDDUP.currentcontroller.ViewCursor
PositionDuCurseurDansLeTableauCUDDUP= CurseurVisible.Cell.CellName
If CurseurVisible.Cell.CellName = PositionDeLaCopieDansLeTableauCUDDUP Then
' CurseurVisible.gotoRange(oMonTableauCUDDUP.getAnchor(),False) 'ne sert à rien
Else 'il faut décaler le curseur
DeplacementHorizontalCUDDUP=Val(Right(PositionDeLaCopieDansLeTableauCUDDUP,1)) - Val(Right(PositionDuCurseurDansLeTableauCUDDUP,1))
DeplacementVerticalCUDDUP=Asc(left(PositionDeLaCopieDansLeTableauCUDDUP,1))-Asc(left(PositionDuCurseurDansLeTableauCUDDUP,1))
CurseurVisible.goDown(DeplacementVerticalCUDDUP,False)
CurseurVisible.goRight(DeplacementHorizontalCUDDUP,False)
End IF
oDispatchHelperCUDDUP = createUnoService( "com.sun.star.frame.DispatchHelper" )
dim args6(0) as new com.sun.star.beans.PropertyValue
args6(0).Name = "SelectedFormat"
args6(0).Value = 3 '3 ' Copie au paragraphe '2 pas de copie '1 pas de copie '3
oDispatchHelperCUDDUP.executeDispatch( document, ".uno:ClipboardFormatItems", "", 0, args6()) 'copie dans le tableau
' oDispatchHelper.executeDispatch( oMonDocumentTexteCUDDUP, ".uno:Paste", "", 0,Array() )
' oDispatchHelperCUDDUP.executeDispatch( document, ".uno:Paste", "", 0,args5() ) 'copie à la page
dim i as integer
dim o as object
' o= ThisComponent.Select() 'document.getPropertySetInfo.Properties ' ici THISCOMPONENT est l'objet à scanner
' Xray o
'for i = lbound(o) to ubound(o)
'print o(i).name
'next i
' document = ThisComponent.CurrentController.Frame
' Print ("recherche de l'ancrage")
' Xray document
' document.SetAnchorToChar
' OuvrirleFichier(NomDuFichierCalcCUDDUP,"", "CopierUnDiagrammeDansUnTableauDUnePage Ligne 657")
' On Error GoTo 0
Exit Sub
errmodifCUDDUP:
print ("Dans le Programme ModifierUnDiagramme L'instruction n'existe pas erreur non Bloquante N°:" & Err & " " & Error & "à la ligne " & Erl)
' Resume Next
End Sub ' CopierUnDiagrammeDansUnTableauDUnePage 8