Hyperliens sur LibreOffice Writer
#1
Ou comment Gemini a tué hyperAVH en quelques secondes...

Allez dans Outils > Macros > Editer les macros

Dans le sélecteur de gauche, aller dans :

Mes macros et boîtes de dialogue > Standard > Module 1

Vous avez un code minimaliste "Sub Main..."
Effacez tout et coller le code ci-dessous, puis sauvegardez (Ctrl-S).

Vous pouvez ensuite Exécuter cette macro "Hyperliens" qui, sur tous les tests que j'ai faits, a parfaitement fonctionné.
Mais attention, vous devez appliquer un style de "Titre" (Titre 1, Titre 2, etc.) à vos numéros de paragraphes au prélable.

Alors, hyperAVH n'est pas tout à fait mort, puisqu'il fait la permutation aléatoire des paragraphes avec la possibilité de conserver certains au même numéro. Gemini s'est (pour l'instant) complétement planté, le langage Basic utilisé étant particulièrement limité.

Code :
Sub Hyperliens
    Dim oDoc As Object
    Dim oSearch As Object
    Dim oFound As Object
    Dim sNum As String
    Dim oParaEnumeration As Object
    Dim oPara As Object
   
    oDoc = ThisComponent
    ' Ask expression
    expression = InputBox("Expression recherchée avant le nombre ?","Hyperliens", "au ")
    If expression = "" Then
        Exit Sub
    End If
   
    ' Create targets
    oParaEnumeration = oDoc.Text.createEnumeration()
    While oParaEnumeration.hasMoreElements()
        oPara = oParaEnumeration.nextElement()
        If oPara.supportsService("com.sun.star.text.Paragraph") Then
            If Left(oPara.ParaStyleName, 7) = "Heading" Or Left(oPara.ParaStyleName, 5) = "Titre" Then
                Dim sText As String : sText = LTrim(oPara.String)
                Dim sID As String : sID = ""
                Dim i As Integer
                For i = 1 To Len(sText)
                    If IsNumeric(Mid(sText, i, 1)) Then : sID = sID & Mid(sText, i, 1) : Else : Exit For : End If
                Next i
                If sID <> "" Then
                    Dim oCursor As Object
                    oCursor = oDoc.Text.createTextCursorByRange(oPara.Start)
                    Dim oBookmark As Object
                    oBookmark = oDoc.createInstance("com.sun.star.text.Bookmark")
                    oBookmark.Name = "_" & sID
                    oDoc.Text.insertTextContent(oCursor, oBookmark, True)
                End If
            End If
        End If
    Wend

    ' Search and add links
    oSearch = oDoc.createSearchDescriptor()
    oSearch.SearchString = expression + "[:digit:]+"
    oSearch.SearchRegularExpression = True
   
    oFound = oDoc.findFirst(oSearch)
   
    While Not IsNull(oFound)
        ' isolate number
        sNum = Mid(oFound.String, 4)
       
        ' apply link on all expression
        oFound.HyperLinkURL = "#_" & sNum
       
        ' create cursor to remove non digit chars
        Dim oFixCursor As Object
        oFixCursor = oDoc.Text.createTextCursorByRange(oFound.Start)
       
        ' select only the 3 first chars and remove link
        oFixCursor.goRight(3, True)
        oFixCursor.HyperLinkURL = ""
       
        ' search next
        oFound = oDoc.findNext(oFound.End, oSearch)
    Wend
   
    MsgBox "Hyperliens ajoutés."
End Sub
Répondre




Utilisateur(s) parcourant ce sujet : 1 visiteur(s)