Macro para recorrer y editar entradas de la tabla de contenidos en Writer

Supongamos que quieres recorrer la tabla de contenidos de un documento Writer para modificar automáticamente algunas de las entradas. Por ejemplo, supongamos que quieres cambiar las entradas que empiezan por » PARTE» (como » PARTE  1″, » PARTE 2″…) por el mismo contenido pero en negrita, y añadirle un salto de línea a continuación. Es decir, quieres modificar el índice de contenido de la imagen de la izquierda para que quede como el de la derecha.

Selection_468

Selection_469

 

 

 

 

Puedes usar la siguiente macro StarBasic en LibreOffice Writer (Herramientas / Macros / Organizar macros / LibreOffice Basic …) :

' Dentro del Módulo1 de "Mis macros", en concreto en el método Main
Dim SearchDesc, oVC, Found, Cursor
Dim Fuera as Boolean 
 
   oDoc = ThisComponent ' oDoc es el documento actual
   SearchDesc = oDoc.createSearchDescriptor ' vamos a realizar una búsqueda
 
   With SearchDesc 
      .SearchString  = "^ PARTE.*$"   ' con esta expresión regular
      .SearchRegularExpression = True 
   end With
 
   oVC = oDoc.getCurrentController.getViewCursor  ' crear cursor para recorrer matches
   Fuera = false
   Found = oDoc.findFirst(SearchDesc) ' situarse en el primer match
 
   Do Until Fuera 
          Found.gotoStartOfSentence(false)  ' ir al comienzo de la línea (sin select)
	  Found.gotoEndOfSentence(true) ' seleccionar hasta final de línea
 
      Cursor = oVC.getText.createTextCursorByRange(Found) ' vamos a modificar la selec.
 
      if NOT IsNull(Cursor.DocumentIndex)  Then
        if NOT IsEmpty(Cursor.DocumentIndex)  Then
           Found.CharWeight = com.sun.star.awt.FontWeight.BOLD  ' por negrita
      	   Cursor.setString(CHR$(13) + Found.getString() + CHR$(13)) ' y salto de línea
           Found = oDoc.findNext(Found.End, SearchDesc) ' vamos a por siguiente match
        else
            Fuera = True
        end if
      end if   
   Loop