Forum des développeurs  

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é.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Autres Logiciels > OpenOffice

OpenOffice Forum d'entraide sur OpenOffice.org. Avant de poster : La F.A.Q OpenOffice

Réponse
 
Outils de la discussion
Vieux 16/06/2008, 12h30   #1 (permalink)
Invité de passage
 
Date d'inscription: octobre 2007
Messages: 9
Par défaut Problème d'insertion de champs user-defined

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
Mais impossible d'insérer un champs user-defined.

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>
Auparavant, j'utilisais une macro pour insérer ces types de champs dans mon document. Un clic sur un bouton d'une boite de dialogue insérait le champs à l'emplacement du curseur visible dans le document.
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
Il semblerait que cette macro se base sur le curseur visible du document, et insère le champs user-defined. Du coup, ça ne fonctionne pas pour insérer dans ma cellule cell du premier script.
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
athanaze est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 17/06/2008, 09h27   #2 (permalink)
Invité de passage
 
Date d'inscription: octobre 2007
Messages: 9
Par défaut

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 là.. ça ne fonctionait toujours pas !!

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())
Je n'ai pas trouvé d'explications claires et précises sur ce point, mais de toute évidence, si on appelle cette sub à partir d'une boite de dialogue Modale, le dispatcher n'est pas exécuté.
Du coup, j'ai simplement retardé l'appel à cette sub à après la fermeture de ma boite de dialogue, et le tour est joué
athanaze est déconnecté   Envoyer un message privé Réponse avec citation
NEWS WINDOWSF.A.Qs WINDOWSTUTORIELS WINDOWSLIVRES WINDOWS

Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Autres Logiciels > OpenOffice



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide


Fuseau horaire GMT +1. Il est actuellement 22h48.


Publiez vos articles, tutoriels et cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter
Copyright 2000-2008 www.developpez.com - Legal informations