Comunidad Gambas-es
[SOLUCIONADO] BASIC Libre Office: ¿Cómo recorrer los párrafos por tipo? - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Linux (https://gambas-es.org/forum-9.html)
+--- Foro: Programación en otros lenguajes (https://gambas-es.org/forum-12.html)
+--- Tema: [SOLUCIONADO] BASIC Libre Office: ¿Cómo recorrer los párrafos por tipo? (/thread-645.html)



BASIC Libre Office: ¿Cómo recorrer los párrafos por tipo? - Grandamakulo - 28-09-2021

Hola a todos:
Creo que esta pregunta debería ir en «Programación en otros lenguajes», pero, como no he encontrado dónde, pues la dejo aquí, a merced de lo que diga el administrador.
La cuestión es que tengo que hacer una macro en LibreOffice BASIC que recorra los párrafos de determinados tipos —«Estilos» mejor que tipos— de todo un documento LO Writer y vea el contenido, el texto, de cada uno. Pero resulta que la cosa ha cambiado mucho desde la última vez que hice cosas de éstas tanto con el LOB como con el VBA y soy incapaz de manejarme en condiciones con el UNO. ¿Alguien podría echarme una mano?
Gracias.
 

Bueno, tras arduas horas persiguiendo StarBASIC y UNO, creo que lo he logrado. Los estilos CC_Página y CC_Viñeta se pueden cambiar, obviamente, por otros:

Código:
Sub DibujaEsquema

    Dim Doc As Object
    Dim Enu As Object
    Dim Tex As Object
    Dim Pag as Integer
    Dim Vin as Integer
    
    Dim Paso As String
    
    ' Aquí tamaño y orientación de la página. Dibuja los marcos
    
    Doc=ThisComponent
    Enu=Doc.Text.createEnumeration
    
    While Enu.hasMoreElements
        Tex=Enu.nextElement
        If Tex.supportsService("com.sun.star.text.Paragraph") Then
            
            If Tex.ParaStyleName=("CC_Página") Then
                Pag=Pag+1
                Vin=0
                'Dibuja la página: Aquí hará «cosas» con la página
                Paso=Paso & "Página: " & Pag & CHr(13)
            End If
            If Tex.ParaStyleName=("CC_Viñeta") Then
                Vin=Vin+1
                'Dibuja la viñeta: Aquí hará «cosas» con la viñeta
                Paso=Paso & "   Viñeta: " & Pag & "." & Vin & " " & Tex.String & Chr(13)
            End If
                    
        End If
    Wend

    MSGBOX (Paso)

End Sub



RE: BASIC Libre Office: ¿Cómo recorrer los párrafos por tipo? - tincho - 28-09-2021

En el menú herramientas / herramientas de desarrollo de Writer hay algo que por ahí te sirve para darte una idea, pero no hice nunca un macro con libreoffice.
Saludos.


RE: BASIC Libre Office: ¿Cómo recorrer los párrafos por tipo? - Grandamakulo - 28-09-2021

Gracias, Tincho:
La verdad es que yo sí que he hecho muchas, pero casi todas, o todas, para Calc o Excel. Las pocas que he hecho para Writer o Word fueron hace veinte años y no me acuerdo, releñes. Y el problema viene, para mí, desde la «búsqueda» de un elemento determinado. Por más vueltas que he dado por la red, no encuentro cómo instanciar un tipo de párrafo.



RE: BASIC Libre Office: ¿Cómo recorrer los párrafos por tipo? - tincho - 29-09-2021

ok, vamos a hacer algo, envíame una macro que haga algo sencillo con un documento writer. así veo como trabaja y tal vez te pueda ayudar, pero primero me tiene que ayudar tu.
Saludos.


RE: BASIC Libre Office: ¿Cómo recorrer los párrafos por tipo? - Grandamakulo - 29-09-2021

¡Ahí va! =D


RE: BASIC Libre Office: ¿Cómo recorrer los párrafos por tipo? - Grandamakulo - 06-10-2021

Bueno, parece que solucionado. He puesto el código en el primer mensaje para que sea más fácil de ver.


RE: BASIC Libre Office: ¿Cómo recorrer los párrafos por tipo? - tincho - 07-10-2021

(06-10-2021, 08:15)Grandamakulo escribió: Bueno, parece que solucionado. He puesto el código en el primer mensaje para que sea más fácil de ver.

Uhh, me perdí en el limbo y al final no hice nada, pero bueno veo que lo solucionaste.
Saludos.


RE: BASIC Libre Office: ¿Cómo recorrer los párrafos por tipo? - Grandamakulo - 08-10-2021

(07-10-2021, 23:25)tincho escribió:
(06-10-2021, 08:15)Grandamakulo escribió: Bueno, parece que solucionado. He puesto el código en el primer mensaje para que sea más fácil de ver.

Uhh, me perdí en el limbo y al final no hice nada, pero bueno veo que lo solucionaste.
Saludos.

Si es que andamos todos como locos con el final del verano  Smile . En cualquier caso, gracias por el interés.