![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
| OpenOffice Forum d'entraide sur OpenOffice.org. Avant de poster : La F.A.Q OpenOffice |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Invité de passage
![]() Date d'inscription: octobre 2007
Messages: 9
|
Bonjour.
Voilà mon problème : à l'aide d'une macro, je dois créer un tableau qui contient des champs user-defined dans un document de type writer. En ce qui concerne la création du tableau, je dirais que je n'ai presque pas de problème (un petit soucis pour récupérer un tableau déjà existant, mais c'est secondaire Là où j'ai vraiment un problème, c'est pour remplir le contenu d'une cellule avec un élément user-defined. Tant qu'il s'agit d'insérer du texte dans la cellule, le modifier, pas de problème, j'utilise pour ça le code suivant : Code :
' index : numéro de la colonne
' tab_suivi : référence vers le tableau que j'ai construit
sub setColValue(index as integer, libelle as string, value as string)
dim cell as object
' on récupère la référence vers la cellule
cell = tab_suivi.getCellByPosition(index,0)
' version insertion de texte, qui fonctionne nickel
cell.string = "#value#" ' mais ça ne convient pas :/
' comment faire pour insérer un champs user-defined
' ayant l'atttribut name à "libelle"
' et la valeur à "value" dans la cellule cell ?
insert_controled_field(libelle,value) 'ne fonctionne pas !! cf code macro plus bas...
end sub
Je cherche a obtenir ça dans le XML du fichier content.xml de mon document final : Code :
<table:table-cell table:style-name="table_2_.A1" office:value-type="string">
<text:p text:style-name="Table_20_Heading">
<text:user-field-get text:name="libelle">#value#</text:user-field-get>
</text:p>
</table:table-cell>
Voici le code de cette macro, qui n'est pas de moi : Code :
sub insert_controled_field(nom as string,value as string)
dim document as object
dim dispatcher as object
dim args2(5) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Type"
args2(0).Value = 20
args2(1).Name = "SubType"
args2(1).Value = 1
args2(2).Name = "Name"
args2(2).Value = nom
args2(3).Name = "Content"
args2(3).Value = value
args2(4).Name = "Format"
args2(4).Value = -1
args2(5).Name = "Separator"
args2(5).Value = " "
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:InsertField", "", 0, args2())
end sub
et je ne sais pas comment déplacer le curseur dans ma cellule. Je ne sais pas si mon approche est la bonne, mais toute aide, suggestion seront les bienvenues. Merci d'avance à ceux qui pourront m'aider. Dernière modification par athanaze ; 16/06/2008 à 20h01 |
|
|
|
|
|
#2 (permalink) |
|
Invité de passage
![]() Date d'inscription: octobre 2007
Messages: 9
|
Bon, et bien j'ai trouvé la réponse tout seul comme un grand
![]() Quelques explications qu'en même, qui pourront servir à certains je pense... D'abord, il est effectivement nécessaire de déplacer le curseur visible pour une insertion correcte des champs user-defined dans les cellules du tableau (via la sub insert_controled_field(nom,valeur) ) L'astuce est de déplacer le curseur visible vers une curseur d'écriture qu'on ouvre pour chaque cellule : Code :
sub setColValue(index as integer, libelle as string, value as string) dim cell as object ' on récupère la référence vers la cellule cell = tab_suivi.getCellByPosition(index,0) ' référence vers le curseur visible CV = thisComponent.CurrentController.ViewCursor ' création d'un curseur d'écriture dans la cellule CE = cell.createTextCursor ' déplacement du curseur visible sur le curseur d'écriture CV.gotoRange(CE,false) ' appel de la sub d'insertion du champ user-defined insert_controled_field(libelle,value) ' fonctione !! end sub Et j'ai compris pourquoi Dans la sub d'insertiton de champs, on utilise un dispatcher Code :
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:InsertField", "", 0, args2())
Du coup, j'ai simplement retardé l'appel à cette sub à après la fermeture de ma boite de dialogue, et le tour est joué
|
|
|
|
|
![]() |
![]() |
||
Problème d'insertion de champs user-defined
|
||
| Outils de la discussion | |
|
|