

![]() | Start a set with this search |
![]() | Include this search in one of my sets |
![]() | Exclude this search from one of my sets |
![]() | Permalink to these results Paste this link in email or IM: |
| Atom feed for tracking future search results Paste this URL into your reader: |
1 message in org.openoffice.fr.progZone itérative dans un document (suite)| From | Sent On | Attachments |
|---|---|---|
| Philippe Allart | Nov 21, 2006 7:18 am |

![]() | Permalink for this message Paste this link in email or IM: |
![]() | Permalink for this thread Paste this link in email or IM: |
| Atom feed for this thread Paste this URL into your reader: |
| Subject: | Zone itérative dans un document (suite) | Actions... |
|---|---|---|
| From: | Philippe Allart (pall...@cudl-lille.fr) | |
| Date: | Nov 21, 2006 7:18:02 am | |
| List: | org.openoffice.fr.prog | |
Bonjour,
Pour faire suite à mon message précédent, voici une méthode qui marche... presque. Je me suis permis de coller les sources dans le message, parce que ça ne me parait pas très volumineux, et je voudrais la soumettre aux experts parce que je me pose des questions sur les spécifications.
L'utilisation est simple: ouvrez un document et où vous voulez dans le texte, créez un paragraphe dans le style "Boucle" et insérez-y une variable utilisateur numérique nommée "N".
Lancez la macro "TestAffectationMultiLignes". le paragraphe est dupliqué 10 fois, avec une valeur différente de N dans chaque occurence. Seul le dernier paragraphe contient réellement la variable, avec sa dernière valeur.
Je me pose les questions suivantes: - le curseur curseurCopier est initialisé une fois pour toute en début de traitement et sélectionne le paragraphe contenant la variable. Cependant du texte est inséré devant ce paragraphe à chaque itération. Tout se passe bien. C'est-à-dire que les pointeurs sont mis à jours dynamiquement. Est-ce conforme aux spécifications? - à chaque itération la variable utilisateur est modifiée, et le contenu de la pseudo variable curseurCopier.String est modifoé en conséquence de manière transparente. Est-ce que cette fonctionalité sera également maintenue? - Enfin, j'ai un problème: si le paragraphe commence pâr une puce ou une numérotation automatique, celle-ci est présente dans la pseudo variable String, si bien que les paragraphes insérés commencent avec deux puces ou deux fois le numéro. Comment éviter celà?
Merci d'avance pour vos réponses,
Ph.
--
'# '# Modifier la valeur d'une VariableNumerique '# '# Sub ChangerVariableNumerique(laVariableNumerique As String, leNombre As Double) Dim monDocument As Object, lesFieldmasters As Object Dim leMaster As Object
monDocument = ThisComponent lesFieldmasters = monDocument.getTextFieldMasters()
leNom="com.sun.star.text.FieldMaster.User." & laVariableNumerique
if lesFieldmasters.hasByName(leNom) then leMaster = lesFieldmasters.getByName(leNom) leMaster.Value = leNombre end if
End Sub
'# '# Sélection d'un paragraphe dans un style donné '#
Function CurseurSurProchainParagrapheStyle(ByVal oCurseur as Object, leStyle as String) as Boolean
CurseurSurProchainParagrapheStyle = false if not oCurseur.isStartOfParagraph then if not oCurseur.gotoNextParagraph(false) then return end if end if
Do if oCurseur.ParaStyleName = leStyle then oCurseur.gotoStartOfParagraph(false) oCurseur.gotoEndOfParagraph(true) CurseurSurProchainParagrapheStyle = true else if not oCurseur.gotoNextParagraph(false) then 'le dernier paragraphe a été atteint exit function end if end if Loop While not CurseurSurProchainParagrapheStyle End Function
'# '# test d'une affectation multilignes '#
sub TestAffectationMultiLignes
Dim curseurCopier as Object ' curseur de lecture Dim curseurColler as Object ' curseur d'écriture Dim monDocument As Object, monTexte as Object dim leStyle as String dim nb_fois as Long dim Saut as Integer dim contenu as String dim ii as long
Paragraphe = com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK
leStyle = "Boucle" nb_fois = 10
monTexte = thisComponent.Text CurseurCopier = monTexte.CreateTextCursor
' Recherche du paragraphe de référence
if CurseurSurProchainParagrapheStyle(CurseurCopier, leStyle) then ' On place le curseur d'écriture devant le paragraphe de référence curseurColler = monTexte.CreateTextCursorByRange(curseurCopier.Start) ' On change la valeur du champ utilisateur ii = 1 ChangerVariableNumerique("N", ii) do While ii < nb_fois ' On récupère le nouveau contenu contenu = curseurCopier.String ' On insère le contenu devant le paragraphe de référence, et ' on marque la fin du nouveau paragraphe monTexte.InsertString(curseurColler, contenu, false) monTexte.insertControlCharacter(curseurColler, Paragraphe, false) ii = ii+1 ChangerVariableNumerique("N", ii) Loop end if end sub







