[RESUELTO] Duda con Macro para filtrado de múltiples paginas

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...

[RESUELTO] Duda con Macro para filtrado de múltiples paginas

Notapor MartyMcfly » Sab Mar 03, 2018 1:17 pm

Modo Paciencia= ON

Buenas y santas, iniciando en el Foro, saludos a todos y los felicito por el gran trabajo desinteresado que hacen.

Utilizo OpenOffice hace poco tiempo, y estoy empezando a incurcionar con Macros, si bien siempre entro al Foro para buscar un centro y miro bastante el libro de Mauricio (genio :bravo: ) pero no pude implementar sus codigos en la Hoja que estoy utilizando.

Mi consulta es la siguiente:

Tengo un Libro con multiple hojas, todas las hojas tienen la misma tabla, mismo encabezado, en la misma ubicacion, pero difieren en sus datos. Lo que necesitaba era, en la primer hoja, tener un buscador que, por el critério del valor de la primer columna, busque los datos coincidientes en todas las paginas del Libro, las actuales y las futuras, y me devuelva el valos de las celdas adyacentes

Gracias a una Macro compartida por el amigo @Fornelasa pude hacer funcionar dicho buscador de datos.

Ahora las dudas (abajo dejo el código y un Libro de ejemplo):

1- Es necesario que para que "busque" en cada hoja del libro tenga que agregar oSheet = oDocument.Sheets(1), oSheet = oDocument.Sheets(2), oSheet = oDocument.Sheets(3), oSheet = oDocument.Sheets(4) o habrá algun comodin para que que busque en infinitas paginas?

2- Cuando realizo una busqueda me arroja correctamente el dato, pero, si el dato esta repetido en varias Hoja solo lista lo encontrado de una sola, pero si en esa hoja el dato esta repetido, si, lista todos los encontrados. Que le debería agregar al código para que me liste "el dato" buscado en las xxHojas y los repetidos en una misma Hoja?

3- Si o si, en el resultado de la busqueda, siempre me va a arrojar el encabezado de la tabla?

4- "Flags"? "SVDFN"?

Debo tener mil preguntas más, pero recien estoy empezando y me nutro de sus experiencias y contribuciones en el Foro, ténganmen paciencia.


Dejo el código que estoy utilizado:

Código: Seleccionar todo   Expandir vistaContraer vista
Sub GenerarFiltro()
Dim oDocument As Object
Dim oSheet As Object
Dim oRange As Object
Dim oSheet2 As Object
Dim oCrite As Object
Dim Salida As New com.sun.star.table.CellAddress
Dim Generar As Object
Borrar
oDocument = ThisComponent
oSheet = oDocument.Sheets(1)
oSheet = oDocument.Sheets(2)
oSheet = oDocument.Sheets(3)
oSheet = oDocument.Sheets(4)
oSheet = oDocument.Sheets(5)
oSheet = oDocument.Sheets(6)
oSheet = oDocument.Sheets(7)
oSheet = oDocument.Sheets(8)
oSheet = oDocument.Sheets(9)
oRange = oSheet.GetCellRangeByName("A4:L4000")
oSheet2 = oDocument.Sheets(0)
oCrite = oSheet2.GetCellRangeByName("A4:A5")
With Salida
.Sheet = 0
.Column = 0
.Row = 8
End With
Generar = oCrite.CreateFilterDescriptorByObject(oRange)
Generar.CopyOutputData = True
Generar.OutputPosition = Salida
Generar.UseRegularExpressions = True
oRange.Filter(Generar)
oSheet = oDocument.Sheets(1)
oRange = oSheet.GetCellRangeByName("A4:L4000")
oSheet2 = oDocument.Sheets(0)
oCrite = oSheet2.GetCellRangeByName("A4:A5")
With Salida
.Sheet = 0
.Column = 0
.Row = 8
End With
Generar = oCrite.CreateFilterDescriptorByObject(oRange)
Generar.CopyOutputData = True
Generar.OutputPosition = Salida
Generar.UseRegularExpressions = True
oRange.Filter(Generar)
End Sub



sub Borrar
dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$10:$L$21"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Flags"
args2(0).Value = "SVDFN"
dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args2())
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$A$4"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())
end sub
Última edición por MartyMcfly el Vie Mar 09, 2018 3:41 am, editado 1 vez en total
Gracias, saludos
Ariel
OpenOffice 4.1.5 - LibreOffice 6.0.2.1 en Microsoft Windows 10 Pro
Avatar de Usuario
MartyMcfly
 
Mensajes: 26
Registrado: Sab Mar 03, 2018 12:20 pm

Re: Duda con Macro para filtrado de multiples paginas

Notapor xiseme » Dom Mar 04, 2018 7:19 pm

Bienvenid@

Así, a «bote pronto»... Repetir en todas las hojas menos la primera(0)
Código: Seleccionar todo   Expandir vistaContraer vista
For i =1 To ThisComponent.Sheets.Count - 1
...
Next i

Código: Seleccionar todo   Expandir vistaContraer vista
Sub GenerarFiltro()
Dim oDocument As Object
Dim oSheet As Object
Dim oRange As Object
Dim oSheet2 As Object
Dim oCrite As Object
Dim Salida As New com.sun.star.table.CellAddress
Dim Generar As Object
Borrar
oDocument = ThisComponent

For i =1 To ThisComponent.Sheets.Count - 1
   oSheet = oDocument.Sheets(i)
   oRange = oSheet.GetCellRangeByName("A4:L4000")
   oSheet2 = oDocument.Sheets(0)
   oCrite = oSheet2.GetCellRangeByName("A4:A5")
   With Salida
   .Sheet = 0
   .Column = 0
   .Row = 8
   End With
   Generar = oCrite.CreateFilterDescriptorByObject(oRange)
   Generar.CopyOutputData = True
   Generar.OutputPosition = Salida
   Generar.UseRegularExpressions = True
   oRange.Filter(Generar)
   oSheet = oDocument.Sheets(i)
   oRange = oSheet.GetCellRangeByName("A4:L4000")
   oSheet2 = oDocument.Sheets(0)
   oCrite = oSheet2.GetCellRangeByName("A4:A5")
   With Salida
   .Sheet = 0
   .Column = 0
   .Row = 8
   End With
   Generar = oCrite.CreateFilterDescriptorByObject(oRange)
   Generar.CopyOutputData = True
   Generar.OutputPosition = Salida
   Generar.UseRegularExpressions = True
   oRange.Filter(Generar)
Next i
End Sub


Para todo lo demás : el libro de Mauricio
Todo es mejorable, estamos dispuestos a mejorar. ¿Yo? ... poco a poco.
Nunca hay acritud en mis comentarios, si lo pareciera, seguro que me he expresado mal.
xiseme
 
Mensajes: 1885
Registrado: Lun Nov 24, 2008 1:13 pm

Re: Duda con Macro para filtrado de multiples paginas

Notapor MartyMcfly » Dom Mar 04, 2018 7:59 pm

Xiseme muchas gracias por la respuesta.

Agregue la linea que me pasaste a mi código y ahora busca correctamente en todas las hojas del Libro, perfecto.

Lo que si, sigo con el tema de que me liste los resultados repetidos que hay en las distintas paginas, ya que solo lista lo que encuentra en la ultima, es decir, seguramente lista todos los resultados encontrados repetidos pero los sobreescribe porque el rango de salida es siempre el mismo. Encuentra el valor buscado en la Hoja 1 y si el valor coincide con el de otra pagina se sobreescribe con este último.

Vere si puede deducir algo con el libro de Don Mauricio.
Gracias, saludos
Ariel
OpenOffice 4.1.5 - LibreOffice 6.0.2.1 en Microsoft Windows 10 Pro
Avatar de Usuario
MartyMcfly
 
Mensajes: 26
Registrado: Sab Mar 03, 2018 12:20 pm

Re: Duda con Macro para filtrado de multiples paginas

Notapor fornelasa » Mar Mar 06, 2018 8:05 pm

Parece que deseas hacer un filtro avanzado de varias hojas.
Aquí un ejemplo, fíjate bien en la estructura de datos (es importante), filtra los mayores a 50 años.
Si hubieras enviado un archivo ejemplo hubiera sido más fácil poder ayudarte.
Al correr la macro no debe existir la hoja "UniónDeDatos"
Ojala puedas adaptarlo a tus necesidades.
Saludos.
Adjuntos
FiltrarVariasHojas.ods
Filtrar varias hojas
(14.6 KiB) 39 veces
lo 6.0.6 | aoo 4.1.5 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
fornelasa
 
Mensajes: 3095
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Duda con Macro para filtrado de multiples paginas

Notapor MartyMcfly » Mié Mar 07, 2018 3:32 am

Fornelasa gracias por la respuesta.

había cargado un Libro de ejemplo, no se que paso.

ahí va:

Filtro multiples paginas.ods
(18.83 KiB) 35 veces
Gracias, saludos
Ariel
OpenOffice 4.1.5 - LibreOffice 6.0.2.1 en Microsoft Windows 10 Pro
Avatar de Usuario
MartyMcfly
 
Mensajes: 26
Registrado: Sab Mar 03, 2018 12:20 pm

Re: Duda con Macro para filtrado de multiples paginas

Notapor fornelasa » Mié Mar 07, 2018 6:39 am

Por eso..... :roll:
Digo..... la macro no es una oda a las buenas técnicas de programación además de que falta depurarla pero ...... :mrgreen:
Saludos
Adjuntos
Filtro multiples paginas.ods
(18.48 KiB) 33 veces
lo 6.0.6 | aoo 4.1.5 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
fornelasa
 
Mensajes: 3095
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Duda con Macro para filtrado de multiples paginas

Notapor fornelasa » Mié Mar 07, 2018 8:04 pm

Lo mismo con una macro más depurada.
Saludos.
Adjuntos
FiltroAvanzadoVariasHojas.ods
Filtro avanzado varias hojas
(18.67 KiB) 35 veces
lo 6.0.6 | aoo 4.1.5 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
fornelasa
 
Mensajes: 3095
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Duda con Macro para filtrado de multiples paginas

Notapor MartyMcfly » Jue Mar 08, 2018 3:42 am

:bravo:

Perfecto!

El filtrado lo utilizo únicamente para los datos de la columna "A" y que vizualice los de las celdas contiguas a la derecha, tal cual funciona. También sobre escribe los datos, genial, yo le estaba por agregar un boton, con otra función, para limpiar la tabla generada. Voy a intentar comprender todo el código a ver si caigo la proxima con algo más resuelto :lol: .

Pregunta: el parpadeo que hace al explorar todas las hojas es algo normal? o me pasa a mi solo.

Muchisimas gracias por la ayuda y el tiempo.
Gracias, saludos
Ariel
OpenOffice 4.1.5 - LibreOffice 6.0.2.1 en Microsoft Windows 10 Pro
Avatar de Usuario
MartyMcfly
 
Mensajes: 26
Registrado: Sab Mar 03, 2018 12:20 pm

Re: Duda con Macro para filtrado de multiples paginas

Notapor fornelasa » Jue Mar 08, 2018 7:04 pm

De nuevo, una macro todavía más depurada y sin parpadeo. Versión 4.
Saludos.
Adjuntos
FiltroAvanzadoVariasHojas_II.ods
release 4
(18.63 KiB) 39 veces
lo 6.0.6 | aoo 4.1.5 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
fornelasa
 
Mensajes: 3095
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Duda con Macro para filtrado de multiples paginas

Notapor MartyMcfly » Vie Mar 09, 2018 3:40 am

Ahora quedo perfecta, pero me dejaste con la intriga jajaj, que producia el parpadeo en la anterior?

Muchimas gracias por la ayuda!! :super: :super:
Gracias, saludos
Ariel
OpenOffice 4.1.5 - LibreOffice 6.0.2.1 en Microsoft Windows 10 Pro
Avatar de Usuario
MartyMcfly
 
Mensajes: 26
Registrado: Sab Mar 03, 2018 12:20 pm

Re: [RESUELTO]Duda con Macro para filtrado de multiples pagi

Notapor MartyMcfly » Vie Mar 09, 2018 4:08 pm

Hoy, queriendo exigirle un poco más, agregue a una de las hojas una columna más, y extendi en rengo de busqueda en el código de la columna "L" a la "Z", por si tuviera una tabla más larga o con otro encabezado y arrojo error, Type: com.sun.star.uno.RuntimeException, sera porque el rango de busqueda no es igual al criterio. Creo que en un principio mientras el encabezado del critério sea igual al de las demas tablas no importaba si tenian 2 columnas o 25 columnas, te las listaba igual.

FiltroAvanzadoVariasHojas_II.ods
(23.66 KiB) 33 veces
Gracias, saludos
Ariel
OpenOffice 4.1.5 - LibreOffice 6.0.2.1 en Microsoft Windows 10 Pro
Avatar de Usuario
MartyMcfly
 
Mensajes: 26
Registrado: Sab Mar 03, 2018 12:20 pm

Re: [RESUELTO] Duda con Macro para filtrado de multiples pag

Notapor fornelasa » Vie Mar 09, 2018 6:05 pm

Hola, el archivo es un ejemplo que tiene el objeto de ser una guía para darnos una idea de como hacerlo, no es una macro hecha exactamente a la medida de nuestras necesidades. Si la estudiamos podemos fácilmente acomodarla a lo que requerimos, ejemplo:
Código: Seleccionar todo   Expandir vistaContraer vista
cursor.collapseToSize(13,5)
oRange = oSheet.GetCellRangeByName("A5:M7000")
Etc
Ojala puedas adaptarla a lo que deseas.

Saludos.
lo 6.0.6 | aoo 4.1.5 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
fornelasa
 
Mensajes: 3095
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.


Volver a Macros y API UNO

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados