Filtraggio di più colonne e filtraggio con espressioni regolari

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


    Other languages:

    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.