[RESUELTO] Macro Para Filtrar Tabla Piloto

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

[RESUELTO] Macro Para Filtrar Tabla Piloto

Notapor alexisarteta » Mié Sep 20, 2017 2:32 pm

Buenos dias, soy nuevo con openoffice, tengo una Macro que genera una Tabla Piloto y funciona perfectamente, pero necesito resolver 2 cosas todavia:

1. Hacer que la macro habilite el filtro de tabla piloto con un filtro que el usuario ingrese a traves de casillas de texto, por fecha, u otro campo que se requiera

2. hacer que el rango de datos que la tabla piloto usa para construirse sea variable, es decir, en este momento se hace con oSheetObj.getCellRangeByName("A1:G7770"), pero la tabla de datos va a crecer con el tiempo.

envio el codigo para que puedan estudiarlo

Código: Seleccionar todo   Expandir vistaContraer vista

dim oController as object
dim oSheetObj as object
dim DataCellRange, RangeAddress, Tables, Descriptor, Fields,   Field1, Field2, Field3, Field4, Cell
   oController = ThisComponent.CurrentController
   oSheetObj = ThisComponent.Sheets.getByName("detalle") 'Hoja de donde se extraen los datos para la tabla piloto
   
   'Buscar la manera de encontrar el rango segun el mes que se esta filtrando
   DataCellRange = oSheetObj.getCellRangeByName("A1:G7770") 'Se establece el rango de donde se toman los datos
   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                   'Muestra el boton de FILTRO
   Descriptor.setSourceRange(RangeAddress)     'El rango de datos es A1:G7770       
   Fields = Descriptor.getDataPilotFields           
   
   '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
   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
   Tables.insertNewByName("NewDataPilot", Cell.CellAddress, Descriptor)
   Tables.getByIndex(0).refresh 'Refresca la Tabla Piloto


Gracias por su atencion, espero puedan ayudarme.


Editado por el moderador mauricio para quitar el icono de la flama que solo sirve para reportar errores, por favor, es importante leer las normas del foro que haz aceptado al registrarte, gracias
Última edición por mauricio el Dom Sep 24, 2017 8:41 pm, editado 4 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 Para Filtrar Tabla Piloto

Notapor fornelasa » Jue Sep 21, 2017 6:16 pm

Para generar un rango variable aquí un posible ejemplo:

Código: Seleccionar todo   Expandir vistaContraer vista
Sub RangoVariable
      hActiva = ThisComponent.CurrentController.ActiveSheet
        Rango =  hActiva.createCursorByRange(hActiva.getCellRangeByName("A1"))
         Rango.collapseToCurrentRegion()
DataCellRange = hActiva.getCellRangeByName(Rango.AbsoluteName)
End Sub

No entendí la pregunta 1, ¿puedes subir un archivo ejemplo hecho a mano?

De acuerdo a las normas del foro debe hacerse una pregunta por tema :roll:

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

Re: Macro Para Filtrar Tabla Piloto

Notapor alexisarteta » Jue Sep 21, 2017 8:15 pm

fornelasa escribió:Para generar un rango variable aquí un posible ejemplo:

Código: Seleccionar todo   Expandir vistaContraer vista
Sub RangoVariable
      hActiva = ThisComponent.CurrentController.ActiveSheet
        Rango =  hActiva.createCursorByRange(hActiva.getCellRangeByName("A1"))
         Rango.collapseToCurrentRegion()
DataCellRange = hActiva.getCellRangeByName(Rango.AbsoluteName)
End Sub

No entendí la pregunta 1, ¿puedes subir un archivo ejemplo hecho a mano?

De acuerdo a las normas del foro debe hacerse una pregunta por tema :roll:

Saludos, Federico.



Hola Fornelasa, gracias por tu respuesta, voy a probar lo y te comento. la pregunta 1 se refiere a los filtros de la tabla piloto, yo se como se filtran los datos despues de que la tabla esta construida pero no se como construirla con la macro y que ya este filtrada como yo quiero: ejemplo que en la macro pueda poner que quiero todo desde la fecha 01/08/2017 hasta 31/08/2017
Adjuntos
Sin título.png
OpenOffice 3.3.0 en Windows 7 Profesional
alexisarteta
 
Mensajes: 23
Registrado: Mié Sep 20, 2017 2:11 pm

Re: Macro Para Filtrar Tabla Piloto

Notapor alexisarteta » Vie Sep 22, 2017 2:38 pm

alexisarteta escribió:
fornelasa escribió:Para generar un rango variable aquí un posible ejemplo:

Código: Seleccionar todo   Expandir vistaContraer vista
Sub RangoVariable
      hActiva = ThisComponent.CurrentController.ActiveSheet
        Rango =  hActiva.createCursorByRange(hActiva.getCellRangeByName("A1"))
         Rango.collapseToCurrentRegion()
DataCellRange = hActiva.getCellRangeByName(Rango.AbsoluteName)
End Sub

No entendí la pregunta 1, ¿puedes subir un archivo ejemplo hecho a mano?

De acuerdo a las normas del foro debe hacerse una pregunta por tema :roll:

Saludos, Federico.



Hola Fornelasa, Gracias el codigo funciona perfectamente, incluso me elimino un error que tenia con otro codigo, sigo atento para saber si puedes ayudarme con el otro problemilla
OpenOffice 3.3.0 en Windows 7 Profesional
alexisarteta
 
Mensajes: 23
Registrado: Mié Sep 20, 2017 2:11 pm

Re: Macro Para Filtrar Tabla Piloto

Notapor fornelasa » Vie Sep 22, 2017 4:18 pm

Si, creo tu consulta es más clara ahora, pero por favor envía un archivo ejemplo con datos para que el que desee ayudarte no empiece desde cero.
Saludos, Federico.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
fornelasa
 
Mensajes: 3223
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Macro Para Filtrar Tabla Piloto

Notapor alexisarteta » Sab Sep 23, 2017 4:13 pm

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