[RESUELTO] Mostrar u ocultar textos en Writer según CheckBox

Discute sobre las herramientas de la base de datos
Responder
jopicach
Mensajes: 143
Registrado: Dom Nov 20, 2016 3:24 pm
Ubicación: Almería (España)

[RESUELTO] Mostrar u ocultar textos en Writer según CheckBox

Mensaje por jopicach »

Hola,

Estoy intentando adaptar a mi proyecto unas funciones que conseguí hacer con Access, pero no se como hacerlo con LibreOffice.
Una de ellas hace lo siguiente: en el formulario de Base lleva unas casillas de verificación y en Writer varios textos (largos y cortos) con marcadores cada uno de ellos. Si por ejemplo, la casilla1 esta marcada, significa que quieres ese texto y entonces el texto1 que tiene un marcador en Writer quedaría en el documento. Pero si no marcas la casilla, significaría que no lo quieres y se quitaría el texto1 del documento y así con todas las casillas que vaya añadiendo. Es decir, que en Writer tengo textos con marcadores y estos permanecen en el o no, según se marquen las casillas en Base.

Subo un ejemplo por si alguien tiene alguna idea de como hacerlo.

Gracias.
Adjuntos
OOoBasic Chk y marcadores.zip
(21.33 KiB) Descargado 181 veces
Última edición por mauricio el Vie Dic 08, 2017 4:17 pm, editado 2 veces en total.
Razón: Marcar icono de resuelto
LibreOffice versión: 7.0.5.2 (x64) - Windows 10 Pro 64 bits
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Mostrar u ocultar textos en Writer según CheckBox de Bas

Mensaje por Longi »

Mira a ver si así sirve o tiene errores de esos míos.....
Incluí los textos en la macro, lo cual puede ser un poco burdo, pero para casos concretos podría servir.
Si en vez de poner el origen de datos en el formulario, lo ponemos en una consulta, y tienes los textos guardados, podríamos hacer lo mismo que hasta ahora, pero con campos que no tienen por qué estar a la vista en el formulario....Pero eso es para otro hilo distinto.

Otro saludo! ;)
Adjuntos
OOoBasic Chk y marcadores.7z
(20.71 KiB) Descargado 181 veces
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
jopicach
Mensajes: 143
Registrado: Dom Nov 20, 2016 3:24 pm
Ubicación: Almería (España)

Re: Mostrar u ocultar textos en Writer según CheckBox de Bas

Mensaje por jopicach »

Hola,

Tu ejemplo está muy bien y me va a servir para adaptarlo a otras partes del proyecto, aunque parecido, no es lo que quería lograr, no me debí expresar bien. Lo que quiero es "simplemente" que al marcar la casilla1 del formulario deje todo el texto que abarca el marcador del documento tal y como está. Pero si desmarco la casilla, todo el texto del marcador casilla1 desaparecerá. Y así con todos los marcadores que tenga.

He puesto el texto de ejemplo en el writer que subo.

Gracias.
Adjuntos
OOoBasic Chk y marcadores2.7z
(23.97 KiB) Descargado 145 veces
LibreOffice versión: 7.0.5.2 (x64) - Windows 10 Pro 64 bits
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Mostrar u ocultar textos en Writer según CheckBox de Bas

Mensaje por Longi »

Visto lo que quieres, lo que se me ocurre es que tendrías que tener el texto en un campo, y hacer que el buscador de textos lo encuentre y lo elimine si lo tienes marcado para ello. Además te quedaría el hueco del texto borrado, o al menos los huecos de encima y debajo del párrafo, cosa que he evitado en el código aportado.
Pienso que la solución aportada es adecuada en términos generales, e incluso, si tienes que variar el texto en función de algún otro campo, lo podrás hacer con clausulas if...then, pudiendo personalizar los textos todo lo que quieras.
Si se te ocurre algo mejor, lo expones, o que lo exponga alguien más, pero a mi me parece que aunque se puedan proponer otras soluciones, ésta sería válida.

Otro saludo!
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
jopicach
Mensajes: 143
Registrado: Dom Nov 20, 2016 3:24 pm
Ubicación: Almería (España)

Re: Mostrar u ocultar textos en Writer según CheckBox de Bas

Mensaje por jopicach »

Gracias,

El querer en hacerlo con el texto en en writer es porque el texto llevará formatos. La opción de buscar y borrar la probé, pero la tuve que descartar por eso. De todas formas muchas gracias.
LibreOffice versión: 7.0.5.2 (x64) - Windows 10 Pro 64 bits
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Mostrar u ocultar textos en Writer según CheckBox de Bas

Mensaje por Longi »

Buenas otra vez!

He añadido una función que busca el texto y luego lo elimina o no, según la casilla esté marcada o no.
Me resulta menos estético que la solución anterior y he tenido que escribir todo el texto en la macro, como lo hice antes, pero creo que algo así era lo que querías hacer.

Otro saludo!
Adjuntos
OOoBasic Chk y marcadores2.7z
(23.99 KiB) Descargado 148 veces
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
jopicach
Mensajes: 143
Registrado: Dom Nov 20, 2016 3:24 pm
Ubicación: Almería (España)

Re: Mostrar u ocultar textos en Writer según CheckBox de Bas

Mensaje por jopicach »

Hola de nuevo,

Creo que esta cerca la solución. En mi caso no es viable lo de poner todo el texto en la macro. El motivo es que el texto que llevaran los marcadores a veces va a ser de varias páginas y no se va a poner todo en la macro.
La solución sería como tu macro, pero en vez de que busque el texto es que busque el marcador, y si se desmarca la casilla borre todo el texto que va dentro del marcador.

Esta macro que he encontrado en el enlace de abajo hace lo que quiero, lo que no se es adaptarla al proyecto. En Writer, la pongo en un botón que al pulsar busca el marcador y borra el texto que lleva. Habría que adaptarla en base para en este caso el texto lo borrase si está desmarcada la casilla.

Subo el ejemplo de writer

https://wiki.openoffice.org/wiki/Docume ... _Than_Text


Dim Doc As Object
Dim Bookmark As Object
Dim Cursor As Object

Doc = ThisComponent

Bookmark = Doc.Bookmarks.getByName("casilla1")

Cursor = Doc.Text.createTextCursorByRange(Bookmark.Anchor)
Cursor.String = ""

________
Gracias.
Adjuntos
Plantilla - copia.odt
(14.94 KiB) Descargado 223 veces
LibreOffice versión: 7.0.5.2 (x64) - Windows 10 Pro 64 bits
jopicach
Mensajes: 143
Registrado: Dom Nov 20, 2016 3:24 pm
Ubicación: Almería (España)

Re: Mostrar u ocultar textos en Writer según CheckBox de Bas

Mensaje por jopicach »

Hola,

En writer me funciona bien el proceso, pero al llamarlo desde base que es lo que necesito, me da un error cuando desactivo la casilla1. Le he puesto las opciones de apertura de writer para que se abra activando las macros, pero nada. Adjunto el ejemplo para que se vea el error que da.

Saludos
Adjuntos
OOoBasic Chk y marcadores4.7z
(33.68 KiB) Descargado 159 veces
LibreOffice versión: 7.0.5.2 (x64) - Windows 10 Pro 64 bits
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Mostrar u ocultar textos en Writer según CheckBox de Bas

Mensaje por Longi »

Al usar una función, las referencias de la macro principal no deben perderse. Si vuelves a declarar Doc como una variable, y además indicas que Doc=ThisComponent, entonces estás apuntando al formulario donde se encuentra el botón que estás accionando.
Si eliminas esas dos líneas, entonces el Doc es el de la macro que llama a la función, y es el documento que necesitas.
Las dos líneas en cuestión las dejé, pero inactivadas.
Vamos! que creo que ya lo tienes arreglado!:

Código: Seleccionar todo

Function Textos (doc, form)

    sd = doc.createSearchDescriptor()
    sd.SearchCaseSensitive = False
    sd.SearchRegularExpression = False
    form.Columns.getElementNames()
  
		'Dim Doc As Object
		Dim Bookmark As Object
		Dim Cursor As Object
		Dim Text As Object
		Dim Anchor As Object
		'Doc = ThisComponent
        Text = Doc.getText()
        If NOT ThisComponent.supportsService(_
   		"com.sun.star.text.TextDocument" ) Then
   		Exit Function
		End If
        
           If form.Columns.getByName("Casilla1").String= "false" Then  
			Bookmark = Doc.Bookmarks().getByName("casilla1")
			Cursor = Doc.Text.createTextCursorByRange(Bookmark.Anchor)
			Cursor.String = ""
            End if
            
          If form.Columns.getByName("Casilla2").String= "false" Then  
             sd.setSearchString("Texto 2: Este texto lleva un marcador que se llama casilla2, cuando la casilla2 del formulario esté marcada este texto seguirá tal y como está. Pero si la casilla está desmarcada, todo este texto se borrará.")
             found = doc.findAll(sd)
             Valor="" 
               For f = 0 To found.Count - 1
               t = found.getByIndex(f)
               t.setString(valor)
               Next f
            End if

            
End function
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
jopicach
Mensajes: 143
Registrado: Dom Nov 20, 2016 3:24 pm
Ubicación: Almería (España)

Re: Mostrar u ocultar textos en Writer según CheckBox de Bas

Mensaje por jopicach »

Hola de nuevo,
:bravo: :bravo: :bravo:
Ahora si!!! Eso es precisamente lo que intentaba hacer. Era muy importante para poder avanzar en mi proyecto el poder conseguirlo.

Muchas gracias por tu tiempo Longi. Seguiré aprendiendo para poder hacer las cosas por mi mismo, y si puedo, ayudar yo también (en alguna ocasión he contestado alguna cosilla que sabía).

Un saludo.
LibreOffice versión: 7.0.5.2 (x64) - Windows 10 Pro 64 bits
Responder