François Gatto a écrit :
abel a écrit :
Bonjour,
Je m'essaie à la programmation avec Oo2, je voudrais aller à la fin du document, sauter une ligne et recopier un tableau qui existe déjà. Tout va bien pour aller en fin de document et sauter une ligne mais pour recopier le tableau j'ai une erreur que je ne comprends pas .

Voici le message d'erreur
Runtime error BASIC.
Une exception s'est produite :
Type : com.star.uno.RuntimeException
Message : SwXTextTable: already attached to range ..

Voici le texte de la macro :

REM  *****  BASIC  *****
Option Explicit

sub new_cadre()
dim mondocument as object
dim monTexte As Object
dim curseurVisible as Object
dim monCurseur as object
dim saut as Integer
dim maTable as Object
rem -------------------------
monDocument = ThisComponent
monTexte = monDocument.Text
curseurVisible = monDocument.CurrentController.ViewCursor
saut = com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK
monCurseur = monTexte.createTextCursor
rem -------------------------
curseurVisible.jumpToLastPage
curseurVisible.jumpToEndOfPage
monTexte.insertControlCharacter(curseurVisible, saut, false)
maTable = monDocument.createInstance("com.sun.star.text.TextTable")
maTable = monDocument.TextTables.getByName("rencontre")
monTexte.insertTextContent(curseurVisible, maTable, false)
end sub

c'est sur l'avant dernière ligne que l'erreur se produit, le tableau existe bien dans le document et le nom est bon.

Si vous avez une idée je suis preneur.
Merci d'avance.

Abel

Il manque plusieurs éléments et sur le principe :
il convient de sélectionner la table à dupliquer,
puis de la copier pour la coller ailleurs.

Voici ton code remanié.
J'espère être suffisamment clair.

Option Explicit

sub new_cadre()
' heu, le nom de la procédure peut être équivoque !
dim mondocument as object
dim monTexte As Object
dim curseurVisible as Object
dim monCurseur as object
dim saut as Integer
dim maTable as Object, oTableRange as object
dim numRows as integer, numCols as integer
dim oDispatcher as object, oSourceFrame as object
dim  Arguments()
rem -------------------------
monDocument = ThisComponent
monTexte = monDocument.Text
curseurVisible = monDocument.CurrentController.ViewCursor
saut = com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK
monCurseur = monTexte.createTextCursor
rem -------------------------
curseurVisible.jumpToLastPage
curseurVisible.jumpToEndOfPage
monTexte.insertControlCharacter(curseurVisible, saut, false)

' on sélectionne la table
maTable = ThisComponent.TextTables.getByName("rencontre")
numRows = maTable.rows.count    ' on récupère le nombre de lignes,
numCols = maTable.columns.count ' et le nombre de colonnes
oTableRange = maTable.getCellRangeByPosition(0,0,numCols-1, numRows-1)
ThisComponent.CurrentController.select(oTableRange)

' on copie la table sélectionnée
oSourceFrame = ThisComponent.CurrentController.Frame
oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
oDispatcher.executeDispatch(oSourceFrame, ".uno:Copy", "", 0, Arguments())

' on se positionne dans le texte
curseurVisible = monDocument.CurrentController.ViewCursor
saut = com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK
monCurseur = monTexte.createTextCursor
rem -------------------------
curseurVisible.jumpToLastPage
curseurVisible.jumpToEndOfPage
monTexte.insertControlCharacter(curseurVisible, saut, false)
' on recopie enfin la table oDispatcher.executeDispatch(oSourceFrame, ".uno:Paste", "", 0, Arguments())

end sub

NB : attention à la recopie du code selon les clients de messagerie.
Chaque ligne est individuelle, *sans* retour à la ligne.

François Gatto
Super, ça marche, un grand merci.

Où pourrais-je obtenir de la documentation sur l'écriture des macros ?
J'ai le livre de Laurent Godard, mais je n'ai pas trouvé dedans le fait de récupérer les le nbre de lignes et de colonnes ...

Merci

Abel



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Répondre à