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]