Ayuda para Modificar Macro en LibreOffice para Manejar Textos Largos con Checkboxes

¡Hola a todos!

Espero que estén bien. Estoy buscando ayuda con una macro en LibreOffice que actualmente uso para copiar textos seleccionados a través de checkboxes, como se muestra en la imagen adjunta. La macro necesita ser modificada para manejar textos más largos que incluyen varios párrafos y recuadros, ya que no procesa correctamente estos elementos en su forma actual.

¿Alguien podría orientarme sobre cómo adaptar esta macro para que maneje adecuadamente textos más complejos? No tengo experiencia con macros, por lo que cualquier consejo sería enormemente útil.

¡Gracias de antemano por su tiempo y ayuda!

Aquí abajo dejo mi código:

Saludos

`Option Explicit

Sub BtEjecutar_Clic( oEv )
'-------------------------------------------------------------------------------------------
   Dim n As Integer, lIntros As Boolean
   Dim Form As Object, Ctrl As Object
   Dim mArg(), NuevoDoc As Object
   Dim DocOrg As Object, DocDst As Object
   Dim Terminar As Boolean

   Form = ThisComponent.Drawpage.Forms.GetByIndex(0)

   ' Compruebo que al menos hay una opción activada
   Terminar = True
   For n=1 To 21
      Ctrl = Form.GetByName("CV" & n)
      If Ctrl.State = 1 Then
         Terminar = False
      EndIf
   Next

   If Terminar Then
      Beep
      MsgBox ("No se ha seleccionado ningún bloque", 192, "LibreOffice.es")
   Else
      DocOrg = ThisComponent.CurrentController.Frame
      DocDst = StarDesktop.LoadComponentFromURL( "private:factory/swriter", "_default", 0, mArg() )
      DocDst = DocDst.CurrentController.Frame

      lIntros = Form.Intros.State = 1

      For n=1 To 21
         Ctrl = Form.GetByName("CV" & n)
         If Ctrl.State = 1 Then
            CopiarTexto( DocOrg, "Texto " & n )
            PegarTexto( DocDst, lIntros )
            Ctrl.State = 0
         EndIf
      Next

      DocDst.ContainerWindow.toFront()
      DocDst.ContainerWindow.SetFocus()
      Beep
      MsgBox ("Proceso terminado", 192, "open-office.es")
   EndIf

End Sub


Sub CopiarTexto( Doc As Object, cBloque As String )
'-------------------------------------------------------------------------------------------
   Doc.ContainerWindow.toFront()
   Doc.ContainerWindow.setFocus()
   Dim dispatcher As Object
   dispatcher = CreateUNOService("com.sun.star.frame.DispatchHelper")

   Dim args1(18) As New com.sun.star.beans.PropertyValue
   args1(0).Name = "SearchItem.StyleFamily"
   args1(0).Value = 2
   args1(1).Name = "SearchItem.CellType"
   args1(1).Value = 0
   args1(2).Name = "SearchItem.RowDirection"
   args1(2).Value = True
   args1(3).Name = "SearchItem.AllTables"
   args1(3).Value = False
   args1(4).Name = "SearchItem.Backward"
   args1(4).Value = False
   args1(5).Name = "SearchItem.Pattern"
   args1(5).Value = False
   args1(6).Name = "SearchItem.Content"
   args1(6).Value = False
   args1(7).Name = "SearchItem.AsianOptions"
   args1(7).Value = False
   args1(8).Name = "SearchItem.AlgorithmType"
   args1(8).Value = 0
   args1(9).Name = "SearchItem.SearchFlags"
   args1(9).Value = 65552
   args1(10).Name = "SearchItem.SearchString"
   args1(10).Value = cBloque
   args1(11).Name = "SearchItem.ReplaceString"
   args1(11).Value = ""
   args1(12).Name = "SearchItem.Locale"
   args1(12).Value = 255
   args1(13).Name = "SearchItem.ChangedChars"
   args1(13).Value = 2
   args1(14).Name = "SearchItem.DeletedChars"
   args1(14).Value = 2
   args1(15).Name = "SearchItem.InsertedChars"
   args1(15).Value = 2
   args1(16).Name = "SearchItem.TransliterateFlags"
   args1(16).Value = 1280
   args1(17).Name = "SearchItem.Command"
   args1(17).Value = 0
   args1(18).Name = "Quiet"
   args1(18).Value = True

   dispatcher.ExecuteDispatch(Doc, ".uno:ExecuteSearch", "", 0, args1())

   Dim args2(1) As New com.sun.star.beans.PropertyValue
   args2(0).Name = "Count"
   args2(0).Value = 1
   args2(1).Name = "Select"
   args2(1).Value = False

   dispatcher.ExecuteDispatch(Doc, ".uno:GoRight", "", 0, args2())
   dispatcher.ExecuteDispatch(Doc, ".uno:EndOfParaSel", "", 0, Array())
   dispatcher.ExecuteDispatch(Doc, ".uno:Copy", "", 0, Array())
   dispatcher.ExecuteDispatch(Doc, ".uno:GoToStartOfDoc", "", 0, Array())

End Sub


Sub PegarTexto( Doc As Object, lExtraIntros As Boolean )
'-------------------------------------------------------------------------------------------
   Dim dispatcher As Object
   dispatcher = CreateUNOService("com.sun.star.frame.DispatchHelper")
   dispatcher.ExecuteDispatch(Doc, ".uno:GoToEndOfDoc", "", 0, Array())
   dispatcher.ExecuteDispatch(Doc, ".uno:Paste", "", 0, Array())
   dispatcher.ExecuteDispatch(Doc, ".uno:InsertPara", "", 0, Array())
   If lExtraIntros Then dispatcher.ExecuteDispatch(Doc, ".uno:InsertPara", "", 0, Array())
   dispatcher.ExecuteDispatch(Doc, ".uno:GoToStartOfDoc", "", 0, Array())
End Sub`

Captura22

Sin tener una muestra de lo que tienes y lo que esperas obtener, es sumamente complicado ayudarte con solo el código. Por favor, anexa un archivo de ejemplo detallando esto para intentar ayudarte.

Hola muy buen dia, no tengo texto completo hecho pero dejare una imagen de ejemplo de la informacion que deseo automatizar con mi codigo de macro,
image

como se logra odservar en la siguiente imagen mi informacion se estructura de igual forma pero los texto son mas largos. pero la macro actual solo me toma el titulo.

Como dije, un archivo con “lo que tienes” y “lo que esperas obtener” es necesario, al menos para mi. Lo siento, soy demasiado perezoso para capturar texto, sobre todo cuando ya existe. Ojala alguien te pueda ayudar con lo que muestras.

hola buen dia mau

tengo mi siguiente texto

Texto 1: Introducción a la Galaxia Nuestra galaxia, la Vía Láctea, es un vasto conjunto de estrellas, planetas, gas y polvo. Esta gigantesca estructura espiral se extiende por más de 100,000 años luz de diámetro. La gravedad mantiene unida a esta impresionante cantidad de materia, permitiendo que la galaxia gire y se mantenga estructurada.

En la Vía Láctea, como en otras galaxias espirales, podemos observar distintas partes que conforman su estructura, como el bulbo galáctico, los brazos espirales y el halo. Cada una de estas partes tiene características específicas y juega roles diferentes en la dinámica y evolución de la galaxia.

Estudiar nuestra galaxia no solo ayuda a los astrónomos a entender nuestro propio entorno cósmico, sino que también proporciona claves sobre cómo se forman y evolucionan otras galaxias en el universo. Con cada descubrimiento, nos acercamos un poco más a comprender los misterios del cosmos.

Texto 2: El Centro Galáctico El corazón de nuestra galaxia es un lugar de extremos. Aquí se encuentra Sagitario A*, un agujero negro supermasivo que ejerce una influencia gravitacional enorme sobre las estrellas y la materia cercanas. Este agujero negro es uno de los objetos más misteriosos y estudiados por los astrónomos.

Alrededor de Sagitario A*, se observa una densa acumulación de estrellas, gas y polvo. Esta región central es extremadamente energética y dinámica, con fenómenos como la emisión de fuertes radiaciones y vientos estelares que afectan a todo el medio interestelar cercano.

Las observaciones del centro galáctico son complicadas debido a la gran cantidad de material cósmico que bloquea nuestra vista en el espectro visible. Sin embargo, el uso de otras longitudes de onda, como el infrarrojo y los rayos X, ha permitido a los científicos estudiar en detalle esta fascinante región.

Texto 3: Los Brazos Espirales La Vía Láctea cuenta con varios brazos espirales, estructuras curvas que se extienden desde el centro galáctico hasta el exterior de la galaxia. El Brazo de Orión, donde se encuentra nuestro sistema solar, es solo uno de ellos. Estos brazos están llenos de regiones de formación estelar, donde nacen nuevas estrellas a partir de nubes de gas y polvo.

Las regiones de formación estelar son vitales para la renovación galáctica. En estas áreas, la gravedad colapsa las nubes de gas, iniciando procesos de fusión nuclear que eventualmente darán lugar a nuevas estrellas. Algunas de estas estrellas serán masivas y de vida corta, terminando sus vidas en explosiones de supernova que enriquecen el medio galáctico con elementos pesados.

Además de estrellas, los brazos espirales contienen una gran cantidad de gas y polvo interestelar. Estos componentes son esenciales para la continuidad de la formación estelar y para la dinámica de la galaxia en general. La estructura espiral de la Vía Láctea es, en parte, el resultado de ondas de densidad que recorren la galaxia, organizando su materia en estas formaciones llamativas.

De acuerdo a eso y la fotografia, el codigo de la macro que subi con anterioridad me presenta el error de que solo me toma si algo el solo titulo del texto, ademas toma solo un parrafo y mi el texto puede tener has 6 parrafos pero si añado una tabla tampoco me lo toma.

agradeceria mucho tu ayuda

¿Cuál es el problema para adjuntar el fichero de ejemplo que te solicita Mauricio?

hola buen dia mariosv, el mayor problema es que si en el texto del 1 al 3 tiene mas de 2 parrafos o alguna tabla no lo toma la macro.

cabe decir que no tengo conocimiento sobre el codigo vba.

tengo mi siguiente texto

Texto 1: Introducción a la Galaxia Nuestra galaxia, la Vía Láctea, es un vasto conjunto de estrellas, planetas, gas y polvo. Esta gigantesca estructura espiral se extiende por más de 100,000 años luz de diámetro. La gravedad mantiene unida a esta impresionante cantidad de materia, permitiendo que la galaxia gire y se mantenga estructurada.

En la Vía Láctea, como en otras galaxias espirales, podemos observar distintas partes que conforman su estructura, como el bulbo galáctico, los brazos espirales y el halo. Cada una de estas partes tiene características específicas y juega roles diferentes en la dinámica y evolución de la galaxia.

Estudiar nuestra galaxia no solo ayuda a los astrónomos a entender nuestro propio entorno cósmico, sino que también proporciona claves sobre cómo se forman y evolucionan otras galaxias en el universo. Con cada descubrimiento, nos acercamos un poco más a comprender los misterios del cosmos.

Texto 2: El Centro Galáctico El corazón de nuestra galaxia es un lugar de extremos. Aquí se encuentra Sagitario A*, un agujero negro supermasivo que ejerce una influencia gravitacional enorme sobre las estrellas y la materia cercanas. Este agujero negro es uno de los objetos más misteriosos y estudiados por los astrónomos.

Alrededor de Sagitario A*, se observa una densa acumulación de estrellas, gas y polvo. Esta región central es extremadamente energética y dinámica, con fenómenos como la emisión de fuertes radiaciones y vientos estelares que afectan a todo el medio interestelar cercano.

Las observaciones del centro galáctico son complicadas debido a la gran cantidad de material cósmico que bloquea nuestra vista en el espectro visible. Sin embargo, el uso de otras longitudes de onda, como el infrarrojo y los rayos X, ha permitido a los científicos estudiar en detalle esta fascinante región.

Texto 3: Los Brazos Espirales La Vía Láctea cuenta con varios brazos espirales, estructuras curvas que se extienden desde el centro galáctico hasta el exterior de la galaxia. El Brazo de Orión, donde se encuentra nuestro sistema solar, es solo uno de ellos. Estos brazos están llenos de regiones de formación estelar, donde nacen nuevas estrellas a partir de nubes de gas y polvo.

Las regiones de formación estelar son vitales para la renovación galáctica. En estas áreas, la gravedad colapsa las nubes de gas, iniciando procesos de fusión nuclear que eventualmente darán lugar a nuevas estrellas. Algunas de estas estrellas serán masivas y de vida corta, terminando sus vidas en explosiones de supernova que enriquecen el medio galáctico con elementos pesados.

Además de estrellas, los brazos espirales contienen una gran cantidad de gas y polvo interestelar. Estos componentes son esenciales para la continuidad de la formación estelar y para la dinámica de la galaxia en general. La estructura espiral de la Vía Láctea es, en parte, el resultado de ondas de densidad que recorren la galaxia, organizando su materia en estas formaciones llamativas.

De acuerdo a eso y la fotografia, el codigo de la macro que subi con anterioridad me presenta el error de que solo me toma si algo el solo titulo del texto, ademas toma solo un parrafo y mi el texto puede tener has 6 parrafos pero si añado una tabla tampoco me lo toma.

agradeceria mucho tu ayuda,

Copia Selectiva de textos a nuevo documento (2).odt (39.1 KB)

¿Este documento es solo un ejemplo? Por que dices que tus textos pueden tener más párrafos y tablas. ¿Que pasa si se seleccionan más de una casilla de verificación?

Por otra parte; para textos predefinidos, es mucho mejor usar AutoTexto, y no necesitas macros.
https://help.libreoffice.org/latest/es/text/swriter/guide/autotext.html?DbPAR=WRITER

1 Like