Page 1 of 1
[Solved] Running macro on Writer
Posted: Tue Mar 16, 2021 7:21 am
by valter
I have a writer document with text in it. I am trying to do the following.
If character="[" Bold the item
After the first state triggers keep bolding until "]" occurs, then bold that item and from then on reset to normal text. Continue till document searched.
I am totally confused with the object commands.
Thanks for any help
Code: Select all
Sub ChangeFonts()
Dim Flag as boolean
Dim doc as object
dim page as ThisComponent
For i = 1 to ActiveDocument.Range.Characters.Count
if doc.Range.Character(i).Text="[" then Flag=true
if Flag=true then doc.Range.Character(i).Font.Bold=true
if doc.Range.Character(i).Text="]" then Flag=false
Next
End Sub
Re: Running macro on Writer
Posted: Tue Mar 16, 2021 11:01 am
by JeJe
You're thinking this is like VBA in Microsoft Word - its different.
Is your bracketed text all in the range of a single paragraph?
If so you can do a find with regex enabled... either by macro or using the find&replace dialog... with this expression:
\[.+?\]
Adapted from
https://community.notepad-plus-plus.org ... entheses/2
Re: Running macro on Writer
Posted: Tue Mar 16, 2021 11:53 am
by JeJe
If multiple paragraphs are spanned try this:
Code: Select all
Sub bracketedToBold
Dim vDescriptor, vFound
vDescriptor = ThisComponent.createSearchDescriptor()
vDescriptor.SearchString = "["
vFound = ThisComponent.findFirst(vDescriptor)
Do While Not IsNull(vFound)
a= vfound.start
vDescriptor.SearchString = "]"
vFound = ThisComponent.findNext( vFound, vDescriptor)
if not isnull(vfound) then
b = vfound.end
tc = vfound.text.createtextcursorbyrange(a)
tc.gotorange(b,true)
'msgbox tc.string
tc.CharWeight = com.sun.star.awt.FontWeight.BOLD
else
exit do
end if
vDescriptor.SearchString = "["
vFound = ThisComponent.findNext( vFound.End, vDescriptor)
Loop
End Sub
Re: Running macro on Writer
Posted: Tue Mar 16, 2021 2:31 pm
by valter
JeJe,
Thanks very much this is ideal.
I intend on studying your answer as I'd like to understand what is happening.
I was approaching it like vb, not sure how it is different though it obviously is.
Thanks again
Re: Running macro on Writer
Posted: Tue Mar 16, 2021 2:57 pm
by JeJe
Its a quick modification of a listing in "Useful Macro Information For OpenOffice" By Andrew Pitonyak
https://www.pitonyak.org/oo.php
His books and the links there are about the best introduction to OOBasic programming
His original, slightly simpler sub is
Code: Select all
'Listing 7.41: Perform a simple search based on words.
Sub SimpleSearchExample
Dim vDescriptor, vFound
' Create a descriptor from a searchable document.
vDescriptor = ThisComponent.createSearchDescriptor()
' Set the text for which to search and other
' http://api.openoffice.org/docs/common/ref/com/sun/star/util/SearchDescriptor.html
With vDescriptor
.SearchString = "hello"
' These all default to false
.SearchWords = true
.SearchCaseSensitive = False
End With
' Find the first one
vFound = ThisComponent.findFirst(vDescriptor)
Do While Not IsNull(vFound)
Print vFound.getString()
vFound.CharWeight = com.sun.star.awt.FontWeight.BOLD
vFound = ThisComponent.findNext( vFound.End, vDescriptor)
Loop