[RESUELTO] Macro Para Filtrar Tabla Piloto

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
alexisarteta
Mensajes: 23
Registrado: Mié Sep 20, 2017 2:11 pm

[RESUELTO] Macro Para Filtrar Tabla Piloto

Mensaje por alexisarteta »

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


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
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Macro Para Filtrar Tabla Piloto

Mensaje por fornelasa »

Para generar un rango variable aquí un posible ejemplo:

Código: Seleccionar todo

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!
alexisarteta
Mensajes: 23
Registrado: Mié Sep 20, 2017 2:11 pm

Re: Macro Para Filtrar Tabla Piloto

Mensaje por alexisarteta »

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

Código: Seleccionar todo

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

Mensaje por alexisarteta »

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

Código: Seleccionar todo

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
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Macro Para Filtrar Tabla Piloto

Mensaje por fornelasa »

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!
alexisarteta
Mensajes: 23
Registrado: Mié Sep 20, 2017 2:11 pm

Re: Macro Para Filtrar Tabla Piloto

Mensaje por alexisarteta »

OpenOffice 3.3.0 en Windows 7 Profesional
Responder