Jump to content

Macros/Calc/ba026/es

From The Document Foundation Wiki
This page is a translated version of the page Macros/Calc/ba026 and the translation is 100% complete.


Resumen:

Esta página proporciona un procedimiento de macro de LibreOffice Basic que crea un filtro estandar simple. Es un ejemplo extraído del Capítulo 13 ("Calc como base de datos") de la Guía de Calc 7.0.

Descripción

En una macro, el filtrado de un intervalo de datos se realiza utilizando el método filtre (), ya sea en el intervalo o la hoja que contiene dicho intervalo. Al igual que un descriptor de clasificación, un "descriptor de filtro" contiene la configuración del filtro para la hoja actual, así como si la primera fila o columna contiene encabezados que no deben filtrarse. Se puede generar un descriptor de filtro utilizando el método CreateFilterDescriptor () en una hoja o en un intervalo de celdas:

createFilterDescriptor(Empty)
Crea un descriptor de filtro. Si el modificador booleano Empty se establece en TRUE, se crea un descriptor de filtro vacío. Si "Empty" se establece en FALSE, el descriptor utilizará la configuración anterior del objeto actual (como un intervalo de base de datos).

Al igual que con los descriptores de clasificación, los descriptores de filtro se pueden crear utilizando este método, modificar y pasar como argumento al método de filtrado. La siguiente macro demuestra este proceso creando un filtro estándar simple para la primera hoja en un documento.

Nota:
Cuando se llama al método filtre en una hoja, cada fila vacía en la hoja está oculta. Cuando se llama a "filtre" en un rango, solo se ocultan las filas vacías del rango en sí.

Código

Sub SimpleSheetFilter()
  Dim oSheet       ' Hoja que contentrá el filtro
  Dim oFilterDesc  ' Descriptor de filtro
  Dim oFields(0) As New com.sun.star.sheet.TableFilterField
  
  oSheet = ThisComponent.getSheets().getByIndex(0)
  
  REM Si el argumento es True, crea un filtro vacío
  REM descriptor. Si el argumento es falso, crea un 
  REM descriptor con los ajustes anteriordes.
  oFilterDesc = oSheet.createFilterDescriptor(True)
  
  With oFields(0)
    REM Puedes usar la propiedad de conexión para indicar
    REM como conectar el campo anterior. Esto es
    REM el primer campo, aunque no es necesario.
    '.Connection = com.sun.star.sheet.FilterConnection.AND
    '.Connection = com.sun.star.sheet.FilterConnection.OR

    REM La propiedad del campo es el número de la columna
    REM (indice 0) para el filtdro. Si conoces la celda
    REM puedes usar .Field = oCell.CellAddress.Column.
    .Field = 5	' columna del ejercicio #2

    REM Comparación numérica o de texto?
    .IsNumeric = True

    REM Se utiliza una comparación numérica 
    REM porque se ha indicaco True a .IsNumeric
    .NumericValue = 80

    REM Si IsNumeric fuese Faalse, entonces 
    REM se utilizaría una comparación de texto.
    REM .StringValue = " cualquiera "

    REM Los operadores puedn ser EMPTY, NOT_EMPTY, EQUAL,
    REM NOT_EQUAL, GREATER, GREATER_EQUAL, LESS,
    REM LESS_EQUAL, TOP_VALUES, TOP_PERCENT,
    REM BOTTOM_VALUES, and BOTTOM_PERCENT
    .Operator = com.sun.star.sheet.FilterOperator.GREATER_EQUAL
  End With
  
  REM El descriptor del filtro puede usar las siguientes
  REM propiedades: IsCaseSensitive, SkipDuplicates,
  REM UseRegularExpressions, 
  REM SaveOutputPosition, Orientation, ContainsHeader, 
  REM CopyOutputData, OutputPosition, and MaxFieldCount.
  oFilterDesc.setFilterFields(oFields())
  oFilterDesc.ContainsHeader = True
  oSheet.filter(oFilterDesc)
End Sub

Este documento de Calc contiene el código LibreOffice Basic.