7 messages in org.openoffice.fr.progRe: [prog] copie tableau
FromSent OnAttachments
abelJul 10, 2008 10:08 am 
Francois GattoJul 10, 2008 11:28 am 
abelJul 11, 2008 3:37 am 
Bernard MarcellyJul 11, 2008 5:10 am 
Jean-Francois NifeneckerJul 11, 2008 5:21 am 
abelJul 11, 2008 6:38 am 
Bernard MarcellyJul 12, 2008 5:24 am 
Actions with this message:
Paste this link in email or IM:
Paste this link in email or IM:
Atom feed for this thread
Paste this URL into your reader:
Subject:Re: [prog] copie tableauActions...
From:Francois Gatto (oo@volcar.org)
Date:Jul 10, 2008 11:28:39 am
List:org.openoffice.fr.prog

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.

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.