Jump to content

Filtraggio di più colonne e filtraggio con espressioni regolari

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


Questa pagina fornisce una procedura macro di LibreOffice Basic che filtra due colonne e utilizza espressioni regolari. È un esempio tratto dal Capitolo 13 ("Calc come database") della Guida 7.0 Calc.

Descrizione

La procedura macro di seguito illustra un filtro che filtra due colonne e utilizza espressioni regolari. Nota che il metodo filter viene chiamato su un intervallo piuttosto che sul suo foglio in questo esempio.

Ad esempio, la macro seguente filtra un foglio di valutazione della classe nelle celle $Foglio1.A1:H11 in base ai punteggi del test n. 1 <= 90% e ai nomi degli studenti che iniziano con "B". Il foglio di calcolo collegato contiene tale foglio di valutazione.

Codice

Sub SimpleRangeFilter()
  Dim oSheet          ' Foglio da filtrare.
  Dim oRange          ' Intervallo da filtrare
  Dim oFilterDesc     ' Descrizione del filtro
  Dim oFields(1) As New com.sun.star.sheet.TableFilterField
  
  oSheet = ThisComponent.getSheets().getByIndex(0)
  oRange = oSheet.getCellRangeByName("A1:H11")
  
  REM Se l'argomento è Vero, crea un 
  REM filtro descrittore vuoto
  oFilterDesc = oRange.createFilterDescriptor(True)

  REM Imposta un campo per visualizzare le celle con contenuto che 
  REM inizia con la lettera B.
  With oFields(0)   
    .Field = 0              ' Filtra la colonna A (Nomi degli studenti).
    .IsNumeric = False      ' Usa una stringa, non un numero.
    .StringValue = "b.*"    ' Ogni nome che inizia con una B.
    .Operator = com.sun.star.sheet.FilterOperator.EQUAL
  End With
  REM Imposta un campo che richieda almeno una delle condizioni.
  REM Questa nuova condizione richiede un valore inferiore a o 
  REM uguale a 90.
  With oFields(1)
    .Connection = com.sun.star.sheet.FilterConnection.OR
    .Field = 6              ' Filtrare la colonna G (gradi del test #1).
    .IsNumeric = True       ' Usa un numero
    .NumericValue = 90      ' Punteggi inferiori 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

Questo Foglio di calcolo Calc contiene il codice soprastante Basic di LibreOffice.