Come da soggetto stavo cercando di creare una macro che trovi gruppi di linee vuote. Credevo di aver risolto ma mi sono arenato davanti ad uno scoglio che non riesco a passare.
Il problema è che le righe di codice da me scritte intercettano anche eventuali immagine fra le righe vuote, cosa che io non vorrei.
Ecco qui il codice da me scritto:
Codice: Seleziona tutto
REM ***** BASIC *****
option explicit
Sub Main
dim vCur
dim rFound
'creo un viewcursor
vCur = thisComponent.getCurrentController.getViewCursor()
'richiamo la function
rFound = findMultiBlankLines(vCur, "")
if IsNull(rFound) then
msgbox("Nothing")
else
'seleziono il range risultante
vCur.gotoRange(rFound,false)
end if
End Sub
function findMultiBlankLines(oCursor, style)
Dim cur as Variant
Dim r as Variant
Dim check as boolean
Dim pSearch as Variant
Dim pFound as Variant
dim cline as integer
on error goto findMultiBlankLinesKO
'creo un textcursor
cur = thisComponent.getText.createTextCursor()
'sposto il cursore alla fine del cursore passato alla funzione
cur.gotorange(oCursor.getEnd,false)
cur.CollapsetoEnd
'creo un secondo textcursor che servirà come risultato della funzione
r = thisComponent.getText.createTextCursor()
'check diventerà vero nel caso si trovi gruppi di linee vuote
check=false
'creo il searchdescriptor
pSearch = thisComponent.createSearchDescriptor
pSearch.SearchRegularExpression = True
pSearch.SearchCaseSensitive=False
pSearch.SearchString="^$" 'regex per righe vuote
pSearch.SearchBackwards = False
'eseguo la ricerca
pFound = thisComponent.findnext(cur.getend,pSearch)
Do while not isNull(pFound)
'adesso che è stata trovata una linea vuota
'imposto il contatore di linee vuote a 0
cline=0
'sposto il cursore all'inizio del range trovato
cur.gotoRange(pFound.getstart,false)
'controllo se lo style del paragrafo sia o come quello passato con style o style sia vuoto
if cur.ParaStyleName = style or style="" then
'eseguo un ciclo che avanzerà di un paragrafo a volta
Do while cur.gotoNextParagraph(False)
'seleziono il paragrafo
cur.gotoEndOfParagraph(True)
'controllo che sia vuoto e che lo stile sia corrispondente o a quello passato o che style sia vuoto
if trim(cur.string)="" and (cur.ParaStyleName = style or style="") then
'se si aggiungo uno al contatore delle linee vuote
cline=cline+1
else
'esco dal do loop che continua a ciclare i paragrafi sequenzialmente
exit do
end if
Loop
'se il contatore delle linee vuote è maggiore di 0
'ho trovato un gruppo di linee vuote
if cline>0 then
'uso il secondo textcursor(r) per creare un range da inviare come risposta alla function
r.gotoRange(pFound.getstart,false)
r.gotoRange(cur.getstart,true)
'setto check vero perchè ho trovato un gruppo di linee vuote
check=true
'esco dal do loop che continua a cercare righe vuote
exit do
end if
end if
'se sono qui non ho trovato gruppi di linee vuote e allora eseguo un'altra ricerca dalla fine del cursore
pFound = thisComponent.findnext(cur.getend,pSearch)
Loop
if check then
findMultiBlankLines=r
else
findMultiBlankLines=nothing
end if
on error goto 0
exit function
findMultiBlankLinesKO:
msgbox ("Error " & Err & ": " & Error$ & chr(13) & "in findMultiBlankLinesKO !")
findMultiBlankLines=nothing
On Error Goto 0
end function
Saluto tutti e spero in un vostro aiuto.