Jump to content

マクロ/Calc/ba026

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


概要

このページでは、簡単な標準フィルターを作成する LibreOffice Basic マクロ プロシージャについて説明します。 7.0 Calc ガイドの第 13 章 ("データベースとしての Calc") から抜粋した例です。

説明

マクロでは、データ範囲のフィルタリングは、範囲または範囲が含まれるシートで filter() メソッドを呼び出すことによって実行されます。 ソート記述子 と同様に、 フィルタ記述子 には、シートの最初の行または列にフィルタリングしないヘッダーが含まれているかどうかなど、現在のシートのフィルタ設定が含まれます。 フィルタ記述子 は、シートまたはセル範囲で createFilterDescriptor() メソッドを呼び出すことによって生成できます。

createFilterDescriptor(Empty)
フィルタ記述子を作成します。ブール フラッグ Empty が TRUE に設定されている場合、空のフィルタ記述子が作成されます。 Empty が FALSE の場合、記述子には現在のオブジェクト (データベース範囲など)の以前の設定が入力されます。

ソート記述子と同様に、フィルター記述子もこのメソッドを使用して作成し、変更してフィルター メソッドに引数として渡すことができます。以下のマクロは、ドキュメントの最初のシートに簡単な標準フィルターを作成することで、このプロセスを示しています。

Note:
シートで filter メソッドが呼び出されると、シート内のすべての空の行が非表示になります。範囲で filter が呼び出されると、範囲自体の空の行のみが非表示になります。

Code

Sub SimpleSheetFilter()
  Dim oSheet       ' フィルターが含まれるシート。
  Dim oFilterDesc  ' フィルター記述子。
  Dim oFields(0) As New com.sun.star.sheet.TableFilterField
  
  oSheet = ThisComponent.getSheets().getByIndex(0)
  
  REM 引数がTrueの場合、空のフィルタを作成します
  REM 記述子。引数がFalseの場合 
  REM 以前の設定の記述子。
  oFilterDesc = oSheet.createFilterDescriptor(True)
  
  With oFields(0)
    REM 接続プロパティを使用
    REM 前のフィールドに接続する方法。これは
    REM 最初のフィールドなので、必須ではありません。
    '.Connection = com.sun.star.sheet.FilterConnection.AND
    '.Connection = com.sun.star.sheet.FilterConnection.OR

    REM フィールドプロパティはゼロベースの列です
    REM フィルターする番号。セルがある場合は、
    REM .Field = oCell.CellAddress.Column を使用できます。
    .Field = 5	' クイズ #2 の成績フィールド

    REM 数値または文字列を使用して比較しますか?
    .IsNumeric = True

    REM NumericValueプロパティを使用 
    REM 上記の通り、 .IsNumeric = True であるためです。
    .NumericValue = 80

    REM IsNumeric がFalseの場合、 
    REM StringValue プロパティが使用されます。
    REM .StringValue = " 文字列"

    REM 有効な演算子には EMPTY, NOT_EMPTY, EQUAL,
    REM NOT_EQUAL, GREATER, GREATER_EQUAL, LESS,
    REM LESS_EQUAL, TOP_VALUES, TOP_PERCENT,
    REM BOTTOM_VALUES、および BOTTOM_PERCENT
    .Operator = com.sun.star.sheet.FilterOperator.GREATER_EQUAL
  End With
  
  REM フィルタ記述子は以下をサポートします
  REM プロパティ: IsCaseSensitive, SkipDuplicates,
  REM UseRegularExpressions, 
  REM SaveOutputPosition, Orientation, ContainsHeader, 
  REM CopyOutputData, OutputPosition、および MaxFieldCount.
  oFilterDesc.setFilterFields(oFields())
  oFilterDesc.ContainsHeader = True
  oSheet.filter(oFilterDesc)
End Sub

この Calc spreadsheet には上記の LibreOffice Basic コードが含まれています。