マクロ/Calc/ba026
TDF LibreOffice Document Liberation Project Community Blogs Weblate Nextcloud Redmine Ask LibreOffice Donate
概要
このページでは、簡単な標準フィルターを作成する LibreOffice Basic マクロ プロシージャについて説明します。 7.0 Calc ガイドの第 13 章 ("データベースとしての Calc") から抜粋した例です。
説明
マクロでは、データ範囲のフィルタリングは、範囲または範囲が含まれるシートで filter() メソッドを呼び出すことによって実行されます。 ソート記述子 と同様に、 フィルタ記述子 には、シートの最初の行または列にフィルタリングしないヘッダーが含まれているかどうかなど、現在のシートのフィルタ設定が含まれます。 フィルタ記述子 は、シートまたはセル範囲で createFilterDescriptor() メソッドを呼び出すことによって生成できます。
- createFilterDescriptor(Empty)
- フィルタ記述子を作成します。ブール フラッグ Empty が TRUE に設定されている場合、空のフィルタ記述子が作成されます。 Empty が FALSE の場合、記述子には現在のオブジェクト (データベース範囲など)の以前の設定が入力されます。
ソート記述子と同様に、フィルター記述子もこのメソッドを使用して作成し、変更してフィルター メソッドに引数として渡すことができます。以下のマクロは、ドキュメントの最初のシートに簡単な標準フィルターを作成することで、このプロセスを示しています。
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 コードが含まれています。