[RESUELTO] Macro Multiples Filtros con tabla piloto

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

[RESUELTO] Macro Multiples Filtros con tabla piloto

Notapor alexisarteta » Lun Sep 25, 2017 8:58 pm

Buenas, use esta solución para colocar filtros a mi tabla piloto
https://forum.openoffice.org/es/forum/v ... 50&t=11998

y quedo de esta manera en mi codigo, pero solo me funciona con los 2 primeros filtros de fecha, pero cuando añado un tercer filtro me da un error, quiero inclusive incluir un 4to filtro,

¿Como puedo usar mas de 2 filtros?

Código: Seleccionar todo   Expandir vistaContraer vista
dim oFunction
dim oController as object
dim oSheetObj as object
dim DataCellRange, RangeAddress, Tables, Descriptor, Fields, Field1, Field2, Field3, Field4, Field5, Cell, nMaxRow, sRangename, RangoTablero

   oController = ThisComponent.CurrentController
   oSheetObj = ThisComponent.Sheets.getByName("detalle") 'Hoja de donde se extraen los datos para la tabla piloto
   oFunction =  createUnoService("com.sun.star.sheet.FunctionAccess")   'Accesa a todas las funciones de openoffice
   'Otra manera de Buscar el rango hasta el final de los datos
   'nMaxRow = ubound(oSheetObj.data) 'Maxima Fila con datos
    'sRangename = "A1:G"+(nMaxRow+1)
    dim oDrawPages, oDP, oForms, oForm
   oDrawPages = ThisComponent.getDrawPages() 'declara los controles que se encuentran en la hoja
   oDP = oDrawPages.getByIndex(0)
   oForms = oDP.getForms() 'declara los formularios
 
   oForm = oForms.getByName("Form") 'toma el nombre del formulario
   


    'Elimina todo formato y datos anteriores de la tabla piloto para evitar sobreescribir los datos
   '*********
    RangoTablero = "A1:Q1000"
   ThisComponent.Sheets.getByName("Tabla Piloto").getCellRangeByName(RangoTablero).clearContents(1023)
   '*********
   
   
    'Busca el rango hasta el final de los datos
    sRangename = oSheetObj.createCursorByRange(oSheetObj.getCellRangeByName("A1")) 'Desde aqui comienza el rango hasta la ultima columna y fila con datos
    sRangename.collapseToCurrentRegion()
    DataCellRange = oSheetObj.getCellRangeByName(sRangename.AbsoluteName) 'Se establece el rango de donde se toman los datos "A1:G7770"
   RangeAddress = DataCellRange.RangeAddress
   '************
   
   Tables = oSheetObj.DataPilotTables()   'Tables Tiene toda la tabla piloto en la hoja activa
   
   'Elimina la tabla si existe. Previene errores si se corre vairas veces
   If Tables.hasByName("NewDataPilot") THEN 
      Tables.removeByName("NewDataPilot")
   End If
   
   Descriptor = Tables.createDataPilotDescriptor()      'Contiene la descripcion de la tabla piloto
   Descriptor.ShowFilterButton = True                   'Crea el boton de FILTRO
   Descriptor.setSourceRange(RangeAddress)            'El rango de datos es A1:G7770       
   Descriptor.FilterDescriptor.CopyOutputData = "True"  'Activa el Boton de Filtro
   Fields = Descriptor.getDataPilotFields() 
   
   'Asignando la columna que sera usada para el filtro de datos
   'Field5 = Fields.getByIndex(1)
   'Field5.Orientation = com.sun.star.sheet.DataPilotFieldOrientation.PAGE         
   
   'Asignando los campos de filas
   Field1 = Fields.getByIndex(4)   'La primra columna con datos es 0
   
   'asigna Enum DataPilotFieldOrientation desde com.sun.star.sheet.DataPilotField
   Field1.Orientation = com.sun.star.sheet.DataPilotFieldOrientation.ROW                                   
   
   Field2 = Fields.getByIndex(5)
   Field2.Orientation = com.sun.star.sheet.DataPilotFieldOrientation.ROW
   
   'Asignando los Campos de Columnas
   Field3 = Fields.getByIndex(3)
   Field3.Orientation = com.sun.star.sheet.DataPilotFieldOrientation.COLUMN   
   
   'Asignando campos de Datos
   Field4 = Fields.getByIndex(6)
   Field4.Orientation = com.sun.star.sheet.DataPilotFieldOrientation.DATA
   Field4.Function = com.sun.star.sheet.GeneralFunction.COUNT 'Opciones  NONE, AUTO, SUM, COUNT, AVERAGE, MAX, MIN, PRODUCT, COUNTNUMS, STDEV, STDEVP, VAR, VARP
   Descriptor.RowGrand = "TRUE"   'Turn off the Total line of the Table
   Cell = ThisComponent.Sheets.getByName("Tabla Piloto").getCellrangeByName("A2") 'Lugar donde se quiere colocar la tabla piloto
   
   Dim FilterField(2) as New com.sun.star.sheet.TableFilterField 'FilterField(1) se refiere a la cantidad de filtros que tendra es decir tendrá 2 filtros 0 y 1
      'Primer Filtro
      'FilterField(0).Connection = com.sun.star.sheet.FilterConnection.OR
        FilterField(0).Field = 1
        FilterField(0).Operator = com.sun.star.sheet.FilterOperator.GREATER_EQUAL 'EQUAL
        FilterField(0).IsNumeric = FALSE
        FilterField(0).StringValue = formato_fecha(oForm.getByName("Fecha1").getCurrentValue())
        
        'Segundo Filtro
        FilterField(1).Connection = com.sun.star.sheet.FilterConnection.AND
        FilterField(1).Field = 1
      FilterField(1).Operator = com.sun.star.sheet.FilterOperator.LESS_EQUAL
      FilterField(1).IsNumeric = FALSE
      FilterField(1).StringValue = formato_fecha(oForm.getByName("Fecha2").getCurrentValue())
        'Descriptor.FilterDescriptor.FilterFields = FilterField
   '***************Hasta aqui funciona bien****************

'***************con este tercer filtro no me funciona me da un error NOSuchElementExeption *********************
      FilterField(2).Connection = com.sun.star.sheet.FilterConnection.AND
        FilterField(2).Field = 1
      FilterField(2).Operator = com.sun.star.sheet.FilterOperator.EQUAL
      FilterField(2).IsNumeric = FALSE
      FilterField(2).StringValue = oForm.getByName("Combodep").getCurrentValue()
        Descriptor.FilterDescriptor.FilterFields = FilterField
        
   Tables.insertNewByName("NewDataPilot", Cell.CellAddress, Descriptor)
Última edición por mauricio el Lun Sep 25, 2017 10:47 pm, editado 2 veces en total
Razón: Marcar icono de resuelto
OpenOffice 3.3.0 en Windows 7 Profesional
alexisarteta
 
Mensajes: 23
Registrado: Mié Sep 20, 2017 2:11 pm

Re: Macro Multiples Filtros con tabla piloto

Notapor mauricio » Lun Sep 25, 2017 9:19 pm

¿que error te da?
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
AOO 4.1 | LibO 6.1.5 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5792
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: México, D.F.

Re: Macro Multiples Filtros con tabla piloto

Notapor alexisarteta » Lun Sep 25, 2017 9:30 pm

este
Adjuntos
Sin título.jpg
OpenOffice 3.3.0 en Windows 7 Profesional
alexisarteta
 
Mensajes: 23
Registrado: Mié Sep 20, 2017 2:11 pm

Re: Macro Multiples Filtros con tabla piloto

Notapor alexisarteta » Lun Sep 25, 2017 9:40 pm

Hola Mauricio, disculpa ahora lo estoy probando pero funciona cuando coloco:
FilterField(2).StringValue = "CESAR"
y falla con oForm.getByName("Combodep").getCurrentValue()
te comento que ComboDep es un cuadro combinado, sera que con .getCurrentValue() no se obtiene el valor actual seleccionado?
OpenOffice 3.3.0 en Windows 7 Profesional
alexisarteta
 
Mensajes: 23
Registrado: Mié Sep 20, 2017 2:11 pm

Re: Macro Multiples Filtros con tabla piloto

Notapor mauricio » Lun Sep 25, 2017 10:03 pm

Usa
Código: Seleccionar todo   Expandir vistaContraer vista
oForm.getByName("Combodep").Text
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
AOO 4.1 | LibO 6.1.5 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5792
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: México, D.F.

Re: Macro Multiples Filtros con tabla piloto

Notapor alexisarteta » Lun Sep 25, 2017 10:24 pm

Amigo gracias, y mil disculpas todo el error era porque la variable "Combodep" estaba mal escrita era "ComboDep"
OpenOffice 3.3.0 en Windows 7 Profesional
alexisarteta
 
Mensajes: 23
Registrado: Mié Sep 20, 2017 2:11 pm


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