Jump to content

Macros/Calc/ba028/es

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


Resumen

Esta página proporciona un procedimiento de macro de LibreOffice Basic que filtra dos columnas y utiliza expresiones regulares. Es un ejemplo extraído del Capítulo 13 ("Calc como base de datos") de la Guía de Calc 7.0.

Descripción

La siguiente macro demuestra como usar un filtro para filtrar dos columnas y el uso de expresiones regulares. Tenga en cuenta que el método filter se utiliza en un intervalo en lugar de la hoja.

La siguiente macro filtra la Hoja1 de calificaciones de alumnos A1:H11 por la columna del ejercicio #1 <= 90% y los nombres de estudiantes que comienzan con la letra "B". La hoja de cálculo para descarga contiene dicha hoja de calificaciones.

Código

Sub SimpleRangeFilter()
  Dim oSheet          ' Hoja en que se aplica el filtro
  Dim oRange          ' Intervalo que se filtra
  Dim oFilterDesc     ' Descriptor de filtro
  Dim oFields(1) As New com.sun.star.sheet.TableFilterField
  
  oSheet = ThisComponent.getSheets().getByIndex(0)
  oRange = oSheet.getCellRangeByName("A1:H11")
  
  REM Si el argumento es True, crea un 
  REM descriptor de filtro vacío
  oFilterDesc = oRange.createFilterDescriptor(True)

  REM Establecer un campo para ver las celdas que 
  REM empiezan por la letra B
  With oFields(0)   
    .Field = 0              ' Filtro por la columna A (Nombres de estudiantes).
    .IsNumeric = False      ' Clasificación de texto, no numérica.
    .StringValue = "b.*"    ' Cada nombre que empieza por B
    .Operator = com.sun.star.sheet.FilterOperator.EQUAL
  End With
  REM Establecer un campo que cumpla al menos una de las condiciones.
  REM El valor debe ser menor que o 
  REM igual a 90
  With oFields(1)
    .Connection = com.sun.star.sheet.FilterConnection.OR
    .Field = 6              ' Filtar por la columna G (Ejercicio #1)
    .IsNumeric = True       ' Clasificación numérica
    .NumericValue = 90      ' Puntuaciones menores a 90
    .Operator = com.sun.star.sheet.FilterOperator.LESS_EQUAL
  End With

  oFilterDesc.setFilterFields(oFields())
  oFilterDesc.ContainsHeader = True
  oFilterDesc.UseRegularExpressions = True
  oRange.filter(oFilterDesc)
End Sub

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