[Résolu] [Writer] Insérer une partie du nom de fichier dans un document

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
MLG
Fraîchement OOthentifié
Messages : 5
Inscription : 19 janv. 2024 14:02

[Résolu] [Writer] Insérer une partie du nom de fichier dans un document

Message par MLG »

Bonjour,

Sur les conseils de Jurassik Pork, je transfère ici le message posté dans la partie "Traitement de texte".
La modération a écrit :Fil de discussion d'origine :
viewtopic.php?p=380140#p380140
Merci de le faire par vous même, ne serait-ce que pour d'autres utilisateurs faisant une recherche sur ce sujet.
J'ai des fichiers .odt dont les noms sont tous de la forme "bidule [machin].odt"
En faisant : Insertion > Champs > Autres champs > Documents > Nom de fichier sans extension , je peux faire apparaître le nom du fichier à l'intérieur de mon document, à savoir "bidule [machin]" dans mon exemple.

Ce n'est malheureusement pas tout à fait ce que je veux. Je souhaiterais uniquement faire apparaître la partie entre crochets du nom de fichier, à savoir "machin".
Quelqu'un aurait-il une idée ?
D'avance merci.

MLG
Dernière modification par micmac le 23 janv. 2024 15:50, modifié 3 fois.
Raison : Ajout de la coche verte.
LibreOffice 7.4 sous WindowsXP et Linux Lubuntu
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 639
Inscription : 09 août 2017 22:15

Re: [Writer] Insérer une partie du nom de fichier dans un document

Message par Jurassic Pork »

Hello,
Voici comment dans un document Writer utiliser des champs utilisateurs qui sont mis à jour par une macro sur un événement.
il faut tout d'abord insérer le champ utlisateur dans le document.

1 - Dans le document, positionner le curseur à l'endroit où l'on veut insérer le champ.
2 - Menu Insertion/Champ/Autres Champs
3 - Dans la fenêtre qui s'ouvre choisir l'onglet Variables et comme type Champ d'utilisateur , Définir son nom et sa valeur par défaut .
4 - Cliquer sur le bouton Insérer
ChampUtil1.png
Exemples utilisés dans la macro :
champ nbObjDessin qui compte le nombre d'objets Dessin dans le document Valeur 0 par défaut
champ partieFichier qui extrait la chaîne qui se trouve entre crochets dans le nom du fichier) Valeur Vide
nbObjDessin 0
partieFichier Vide

Voici les macros qui met à jour les deux champs.

Code : Tout sélectionner

Sub MiseAjourChamps()
   Dim sFichier As String , startCar As Integer, endCar As Integer
   Dim oTextField As Object, oTextfields As Object, oTextfieldsEnumeration As Object
    oTextfields = thiscomponent.Textfields
    oTextfieldsEnumeration = oTextfields.createEnumeration
    While oTextfieldsEnumeration.hasmoreelements
       oTextfield = oTextfieldsEnumeration.nextelement
       if oTextfield.supportsservice("com.sun.star.text.TextField.User") then
           if oTextfield.TextFieldMaster.Name = "nbObjDessin" then
                oTextField.TextFieldMaster.Value = nbObjDessin()
           end if
           if oTextfield.TextFieldMaster.Name = "partieFichier" then
                sFichier = ConvertFromUrl(thiscomponent.getURL())
                startCar = InStr(sFichier,"[")
                endCar =  InStr(sFichier,"]")
                oTextField.TextFieldMaster.Content = Mid(sFichier,startCar + 1,endCar - startCar -1)
           end if
       end if     
    wend
    oTextFields.refresh
end sub

Function nbObjDessin() As Integer
    Dim Doc As Object, Page As Object, oShape As Object, i As Integer
    Doc = ThisComponent
    Page = Doc.DrawPages(0)
    for i = 0 to Page.count - 1
        oShape = Page(i)
        if oShape.ImplementationName = "SwXShape" then
            nbObjDessin = nbObjDessin + 1
        end if
    next i
End Function
A noter que la partie nbObjDessin c'est pour répondre à cette discussion

Pour "câbler" par exemple la macro MiseAjourChamps sur l'ouverture du document:
1 - Menu Outils/Personnaliser Onglet Evénements
2 - Choisir Activer le document et Assigner la macro MiseAjourChamps
ChampUtil2.png



Ami calmant, J.P
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
MLG
Fraîchement OOthentifié
Messages : 5
Inscription : 19 janv. 2024 14:02

Re: [Writer] Insérer une partie du nom de fichier dans un document

Message par MLG »

Bonjour JP,

J'ai dû faire une mauvaise manip au départ mais désormais tout marche parfaitement. Bravo !
Je te remercie sincèrement de l'intérêt que tu as porté à mon problème et du temps que tu y as consacré.
Ta solution qui va me faire gagner énormément de temps au quotidien : un immense merci.
Dernière modification par MLG le 23 janv. 2024 15:35, modifié 2 fois.
LibreOffice 7.4 sous WindowsXP et Linux Lubuntu