[Resuelto] macro auto filtro de fechas en dos columnas

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
physic
Mensajes: 85
Registrado: Lun Oct 29, 2018 12:55 am

[Resuelto] macro auto filtro de fechas en dos columnas

Mensaje por physic »

saludos

                       estoy a días tratando de construir una macro para Auto Filtro automático de intervalo de fechas en dos columnas diferentes en la misma hoja de cálculo

                       por ejemplo:

                       la hoja de cálculo1 tiene 5000 líneas, la columna A y la columna F contiene Fechas

                       es necesario filtrar en la columna A el intervalo de fechas entre 15/01/2008 hasta 20/12/2015 y en la columna F preciso filtrar el intervalo de fechas entre 10/03/2008 hasta 25/12/2010

                       es necesario ser a través de macro y necesita hacer los dos filtros juntos en la misma macro

                       he intentado varios ejemplos de los foros, pero ningún ejemplo es parecido a mi problema.



                    abrazos
Última edición por physic el Lun Nov 19, 2018 4:33 pm, editado 1 vez en total.
LibreOffice 5.4.4.2 >>> Windows 7
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: macro auto filtro de fechas en dos columnas

Mensaje por Longi »

Buenas!
Vuelvo a contestar algo en lo que no controlo nada, y eso es indicativo de que si yo he sido capaz, seguramente tú con alguna búsqueda y un poco de empeño, también eres capaz de conseguirlo (todo ello contando con que funcione en tu hoja de trabajo. En mi hoja de ejemplo me parece que sí que funciona, pero mis resultados son para congerlos con pinzas)

Código: Seleccionar todo

sub filtra_Fechas()

Dim xRange as object
Dim FilterDesc as Object
Dim FilterFields(3) as new com.sun.star.sheet.TableFilterField

xRange = thiscomponent.getcurrentcontroller.activesheet.getCellRangeByName("A2:F100")
FilterDesc = xRange.createFilterDescriptor(true)

FilterDesc.ContainsHeader = false
FilterFields(0).Field = 0
FilterFields(0).IsNumeric = true
FilterFields(0).Operator = com.sun.star.sheet.FilterOperator.GREATER_EQUAL
FilterFields(0).NumericValue = CLng(CDate("15/01/2008"))  

FilterDesc.ContainsHeader = false
FilterFields(1).Field = 0
FilterFields(1).IsNumeric = true
FilterFields(1).Connection = com.sun.star.sheet.FilterConnection.AND
FilterFields(1).Operator = com.sun.star.sheet.FilterOperator.LESS_EQUAL
FilterFields(1).NumericValue = CLng(CDate("20/12/2015")) 

FilterFields(2).Field = 5
FilterFields(2).Connection = com.sun.star.sheet.FilterConnection.OR
FilterFields(2).Operator = com.sun.star.sheet.FilterOperator.GREATER_EQUAL
FilterFields(2).IsNumeric = True
FilterFields(2).NumericValue = CLng(CDate("10/03/2008")) 

FilterDesc.ContainsHeader = false
FilterFields(3).Field = 5
FilterFields(3).IsNumeric = true
FilterFields(3).Connection = com.sun.star.sheet.FilterConnection.AND
FilterFields(3).Operator = com.sun.star.sheet.FilterOperator.LESS_EQUAL
FilterFields(3).NumericValue = CLng(CDate("25/12/2010"))

FilterDesc.SetFilterFields(FilterFields)

xRange.Filter(FilterDesc)

End Sub

Supongo que está bien para funcionar, sólo falta hacer las pruebas correspondientes y cruzar los dedos, no vaya a ser que todo reviente.

Un saludo! ;)
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
physic
Mensajes: 85
Registrado: Lun Oct 29, 2018 12:55 am

Re: macro auto filtro de fechas en dos columnas

Mensaje por physic »

sr. Longi

            hice un modelo para probar su código, pero parace que no funcionó correctamente como necesitaba funcionar

sigue el modelo adjunto para análisis


abrazos
Adjuntos
filter fechas.ods
(38.66 KiB) Descargado 228 veces
LibreOffice 5.4.4.2 >>> Windows 7
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: macro auto filtro de fechas en dos columnas

Mensaje por Longi »

Buenas!

Creo que el problema está en las referencias (yo hice la búsqueda para la primera columna, empezando por la letra A, y además puse solo 50 filas).
Mira a ver con estas modificaciones si se adaptan a lo que se necesita:

Código: Seleccionar todo

sub filtra_Fechas()

Dim xRange as object
Dim FilterDesc as Object
Dim FilterFields(3) as new com.sun.star.sheet.TableFilterField

xRange = thiscomponent.getcurrentcontroller.activesheet.getCellRangeByName("B2:B5000")
FilterDesc = xRange.createFilterDescriptor(true)

FilterDesc.ContainsHeader = false
FilterFields(0).Field = 0
FilterFields(0).IsNumeric = true
FilterFields(0).Operator = com.sun.star.sheet.FilterOperator.GREATER_EQUAL
FilterFields(0).NumericValue = CLng(CDate("15/01/2008"))  

FilterDesc.ContainsHeader = false
FilterFields(1).Field = 0
FilterFields(1).IsNumeric = true
FilterFields(1).Connection = com.sun.star.sheet.FilterConnection.AND
FilterFields(1).Operator = com.sun.star.sheet.FilterOperator.LESS_EQUAL
FilterFields(1).NumericValue = CLng(CDate("20/12/2015")) 

FilterFields(2).Field = 4
FilterFields(2).Connection = com.sun.star.sheet.FilterConnection.OR
FilterFields(2).Operator = com.sun.star.sheet.FilterOperator.GREATER_EQUAL
FilterFields(2).IsNumeric = True
FilterFields(2).NumericValue = CLng(CDate("10/03/2008")) 

FilterDesc.ContainsHeader = false
FilterFields(3).Field = 4
FilterFields(3).IsNumeric = true
FilterFields(3).Connection = com.sun.star.sheet.FilterConnection.AND
FilterFields(3).Operator = com.sun.star.sheet.FilterOperator.LESS_EQUAL
FilterFields(3).NumericValue = CLng(CDate("25/12/2010"))

FilterDesc.SetFilterFields(FilterFields)

xRange.Filter(FilterDesc)

End Sub
Ya nos cuentas.

Un saludo! ;)
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
physic
Mensajes: 85
Registrado: Lun Oct 29, 2018 12:55 am

Re: macro auto filtro de fechas en dos columnas

Mensaje por physic »

En la columna B funcionó perfecto

Pero en la columna F no funcionó


abrazos
LibreOffice 5.4.4.2 >>> Windows 7
physic
Mensajes: 85
Registrado: Lun Oct 29, 2018 12:55 am

Re: macro auto filtro de fechas en dos columnas

Mensaje por physic »

sr. Longi

      comando OR por el comando AND y funcionó correcto

      gracias por su ayuda


abrazos
LibreOffice 5.4.4.2 >>> Windows 7
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: [Resuelto] macro auto filtro de fechas en dos columnas

Mensaje por Longi »

Buenas de nuevo!
Pudiera ser que todo esté mal, pero quisiera pensar que no es así, que simplemente es una mala lectura del primer mensaje por mi parte.
En la estructura de la macro hay cuatro bloques de filtro, y en los tres últimos aparecen los operadores lógicos 'AND' y 'OR'.
En función de cómo los pongas tendrás una cantidad de registros u otra.
Lo que yo intenté era que quedasen todos los registros filtrados entre los dos primeros bloques de filtro de la macro (primera columna), y después, si del segundo grupo (dos bloques del final de la macro) que afectan a la segunda columna tuviese algún registro que originalmente no fuese filtrado en la primera columna, también aparecería en el resultado final.
Jugando con los 'AND' y 'OR' he tenido estos totales de registros para el ejemplo propuesto:

AND+AND+AND= 142 registros
AND+AND+OR= 271 registros
AND+OR+AND= 239 registros
OR+AND+AND= 468 registros

Haz pruebas a ver cual es lo que quieres que te salga.
Si no te termina de funcionar apórtanos el conjunto de resultados que querrías que saliese con los datos del ejemplo que ya tenemos (o con otro diferente), a ver si arreglamos algo.

Otro saludo! ;)
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
Responder