Nombre de messages : 45 Âge : 37 Date d'inscription : 13/12/2020 | Louvoir / Petit chose Sam 30 Jan 2021 - 20:10 | |
| Bonjour à tous, Quand je suis arrivé sur ce forum et que j'ai voulu poster mon premier texte, je me suis heurté à la mise en page fastidieuse nécessaire pour faire de jolis posts qui donnent envie de lire. Du coup, j'ai fait appel à une autre de mes passions qui est la programmation de macros J'ai fait quelque chose de tout simple qui permet de mettre des alinéa devant tous les paragraphes, de justifier le texte et de le mettre sur fond blanc. Maintenant, en un clic je fais tout! Je me suis dit que ça pourrait vous intéresser si vous savez utiliser les macros sur libreoffice ou openoffice. Du coup je vous partage mon code pour ceux que ça intéresse : - Spoiler:
- Code:
-
Sub lancer_cette_macro
dim document as object dim dispatcher as object dim Enum As Object dim TextEl As Object dim Count As Long
document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:GoToEndOfDoc", "", 0, Array()) dispatcher.executeDispatch(document, ".uno:InsertPara", "", 0, Array()) dispatcher.executeDispatch(document, ".uno:GoToStartOfDoc", "", 0, Array()) Count = 0 Enum = ThisComponent.Text.CreateEnumeration While Enum.HasMoreElements TextEl = Enum.NextElement If TextEl.SupportsService("com.sun.star.text.Paragraph") Then Count = Count + 1 End If Wend
call insert_balise_parag(Count - 1)
End Sub
Sub insert_balise_parag(num_tot as integer)
dim document as object dim dispatcher as object Dim CurseurVisible As Object Dim monCurseur As Object Dim monTexte As Object
'renseignement du nombre de cm pour l'alinéa en début de chaque paragraphe InputVal = InputBox("Entrez une valeur en centimètre (séparateur décimale ""."")", "Quelle marge voulez-vous insérer au début de chaque paragraphe ?", "1")
'définition du décalage de 1 sans sélection dim args3(1) as new com.sun.star.beans.PropertyValue args3(0).Name = "Count" args3(0).Value = 1 args3(1).Name = "Select" args3(1).Value = false
for num = 1 to num_tot 'selection du premier mot du paragraphe document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") dispatcher.executeDispatch(document, ".uno:WordRightSel", "", 0, Array()) 'enregistrement de ce premier mot et analyse CurseurVisible = ThisComponent.CurrentController.ViewCursor monTexte = CurseurVisible.Text monCurseur = monTexte.createTextCursorByRange(CurseurVisible) 'si pas de saut de ligne et pas dernière ligne du texte if instr(monCurseur.String,chr(10)) = 0 and monCurseur.String <> "" then 'décalage curseur pour revenir au début du paragraphe document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") dispatcher.executeDispatch(document, ".uno:GoToPrevWord", "", 0, Array()) 'écriture de la balise début de paragraphe text = ThisComponent.CurrentSelection.getByIndex(0).End text.String = "<span style=""margin-left:" & InputVal & "cm;"">" 'décalage à la fin du paragraphe dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") dispatcher.executeDispatch(document, ".uno:GoToNextPara", "", 0, Array()) dispatcher.executeDispatch(document, ".uno:GoLeft", "", 0, args3()) 'écriture de la balise de fin du paragraphe text = ThisComponent.CurrentSelection.getByIndex(0).End text.String = "</span>" end if if instr(monCurseur.String,chr(10)) <> 0 then 'si saut de ligne alors revenir au début de la ligne dispatcher.executeDispatch(document, ".uno:GoToStartOfLine", "", 0, Array()) else 'sinon décalage vers début du paragraphe suivant dispatcher.executeDispatch(document, ".uno:GoToNextPara", "", 0, Array()) end if next num
call autres_balises
End Sub
sub autres_balises
dim document as object dim dispatcher as object
'retour au début du document document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") dispatcher.executeDispatch(document, ".uno:GoToStartOfDoc", "", 0, Array()) 'écriture de la balise début de texte (fond blanc et justifié) text = ThisComponent.CurrentSelection.getByIndex(0).End text.String = "<div style=""background-color:#FFFFFF;border:1px solid #FFFFF0;text-indent:15px;padding:2%;width:90%;""><span style=""line-height:22px;""></span>" 'positionnement en fin de texte dispatcher.executeDispatch(document, ".uno:GoToEndOfDoc", "", 0, Array()) text = ThisComponent.CurrentSelection.getByIndex(0).End text.String = "</span></div>"
end sub
Vous devez copier ce code dans un module de macro, vous copiez le texte que vous voulez mettre en forme sur la page Writer, et vous lancez la macro appelée "lancer_cette_macro". Elle vous demande quelle taille d'alinéa vous voulez et c'est parti C'était mon activité du weekend ;-)
Dernière édition par Louvoir le Dim 31 Jan 2021 - 12:26, édité 1 fois |
|
Nombre de messages : 4666 Âge : 28 Localisation : Bureau Pensée du jour : Pétit coucou Date d'inscription : 12/05/2012 | Radischat / Dr. Danielle Jackson Sam 30 Jan 2021 - 20:12 | |
| Je vais sans doute déplacer ça dans Fiches Techniques ! |
|