Macros/Calc/ba028/es
TDF LibreOffice Document Liberation Project Blogs comunitarios Weblate Nextcloud Redmine Ask LibreOffice Donar
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.