IRowFilterインタフェースより提供されている各メソッド呼び出しよって様々な行フィルタリング結果を取得することができます。以下のサンプルでは「表示されている行数」や「非表示となった行インデックス」などの取得方法を紹介します。(便宜上、スタイルフィルタを適用しています)
※取得結果例については頁末尾を参照
|
private void Form1_Load(object sender, System.EventArgs e) { fpSpread1.ActiveSheet.RowCount = 7; //自動フィルタのフィルタガジェットを表示します fpSpread1.ActiveSheet.AutoFilterMode = FarPoint.Win.Spread.AutoFilterMode.FilterGadget; //フィルタイン行用の名前付きスタイルオブジェクトを作成します FarPoint.Win.Spread.NamedStyle InNs = new FarPoint.Win.Spread.NamedStyle(); InNs.BackColor = Color.LightCyan; InNs.ForeColor = Color.Red; //フィルタアウト行用の名前付きスタイルオブジェクトを作成します FarPoint.Win.Spread.NamedStyle OutNs = new FarPoint.Win.Spread.NamedStyle(); OutNs.BackColor = Color.LemonChiffon; OutNs.ForeColor = Color.Green; //1列目に対する新しいフィルタ列定義を作成します(デフォルト設定の定義) FarPoint.Win.Spread.FilterColumnDefinition fcd = new FarPoint.Win.Spread.FilterColumnDefinition(0); //StyleRowFilterオブジェクト(スタイルフィルタ)を作成し、上記フィルタ列定義を追加します FarPoint.Win.Spread.StyleRowFilter sf = new FarPoint.Win.Spread.StyleRowFilter(fpSpread1.ActiveSheet, InNs, OutNs); sf.AddColumn(fcd); //作成した行フィルタオブジェクトをシート設定します fpSpread1.ActiveSheet.RowFilter = sf; fpSpread1.ActiveSheet.Cells[0, 0].Value = "North"; fpSpread1.ActiveSheet.Cells[1, 0].Value = "South"; fpSpread1.ActiveSheet.Cells[2, 0].Value = "East"; fpSpread1.ActiveSheet.Cells[3, 0].Value = "South"; fpSpread1.ActiveSheet.Cells[4, 0].Value = "North"; fpSpread1.ActiveSheet.Cells[5, 0].Value = "North"; fpSpread1.ActiveSheet.Cells[6, 0].Value = "West"; fpSpread1.ActiveSheet.Columns[0].Width = 80; } private void button1_Click(object sender, System.EventArgs e) { //********************************************* //1列目がフィルタリングされていなければ終了 //********************************************* if (fpSpread1.ActiveSheet.RowFilter.IsFiltered(0) != true) { return; } //********************************************* //フィルタリング文字列 //********************************************* Console.WriteLine("フィルタリング文字列:" + fpSpread1.ActiveSheet.RowFilter.GetColumnFilterBy(0)); Console.WriteLine(""); //********************************************* //フィルタイン(表示)された行数 //********************************************* Console.WriteLine("フィルタイン(表示)された行数:" + fpSpread1.ActiveSheet.RowFilter.GetIntersectedFilteredInRows().Length.ToString()); Console.WriteLine(""); //********************************************* //フィルタアウト(非表示)された行数 //********************************************* Console.WriteLine("フィルタアウト(非表示)された行数:" + fpSpread1.ActiveSheet.RowFilter.GetFilteredOutRowList().Count.ToString()); Console.WriteLine(""); for (int i = 0; i <= fpSpread1.ActiveSheet.RowFilter.GetFilteredOutRowList().Count - 1 ; i++) { //********************************************* //フィルタアウト(非表示)された行インデックス //********************************************* Console.WriteLine("フィルタアウト(非表示)された行インデックス:" + Convert.ToString(fpSpread1.ActiveSheet.RowFilter.GetFilteredOutRowList()[i])); } Console.WriteLine(""); //********************************************* //フィルタイン(表示)/アウト(非表示)された行 //********************************************* for (int i = 0; i <= fpSpread1.ActiveSheet.RowCount -1 ; i++) { if (fpSpread1.ActiveSheet.RowFilter.IsRowFilteredOut(i) == true) Console.WriteLine("フィルタアウト(非表示)された行のデータ:" + fpSpread1.ActiveSheet.GetText(i, 0)); else Console.WriteLine("フィルタイン(表示)されている行のデータ:" + fpSpread1.ActiveSheet.GetText(i, 0)); } }
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load FpSpread1.ActiveSheet.RowCount = 7 '自動フィルタのフィルタガジェットを表示します FpSpread1.ActiveSheet.AutoFilterMode = FarPoint.Win.Spread.AutoFilterMode.FilterGadget 'フィルタイン行用の名前付きスタイルオブジェクトを作成します Dim InNs As New FarPoint.Win.Spread.NamedStyle InNs.BackColor = Color.LightCyan InNs.ForeColor = Color.Red 'フィルタアウト行用の名前付きスタイルオブジェクトを作成します Dim OutNs As New FarPoint.Win.Spread.NamedStyle OutNs.BackColor = Color.LemonChiffon OutNs.ForeColor = Color.Green '1列目に対する新しいフィルタ列定義を作成します(デフォルト設定の定義) Dim fcd As New FarPoint.Win.Spread.FilterColumnDefinition(0) 'StyleRowFilterオブジェクト(スタイルフィルタ)を作成し、上記フィルタ列定義を追加します Dim sf As New FarPoint.Win.Spread.StyleRowFilter(FpSpread1.ActiveSheet, InNs, OutNs) sf.AddColumn(fcd) '作成した行フィルタオブジェクトをシート設定します FpSpread1.ActiveSheet.RowFilter = sf FpSpread1.ActiveSheet.Cells(0, 0).Value = "North" FpSpread1.ActiveSheet.Cells(1, 0).Value = "South" FpSpread1.ActiveSheet.Cells(2, 0).Value = "East" FpSpread1.ActiveSheet.Cells(3, 0).Value = "South" FpSpread1.ActiveSheet.Cells(4, 0).Value = "North" FpSpread1.ActiveSheet.Cells(5, 0).Value = "North" FpSpread1.ActiveSheet.Cells(6, 0).Value = "West" FpSpread1.ActiveSheet.Columns(0).Width = 80 End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click '********************************************* '1列目がフィルタリングされていなければ終了 '********************************************* If Not FpSpread1.ActiveSheet.RowFilter.IsFiltered(0) Then Return End If '********************************************* 'フィルタリング文字列 '********************************************* Console.WriteLine("フィルタリング文字列:" + FpSpread1.ActiveSheet.RowFilter.GetColumnFilterBy(0)) Console.WriteLine("") '********************************************* 'フィルタイン(表示)された行数 '********************************************* Console.WriteLine("フィルタイン(表示)された行数:" + FpSpread1.ActiveSheet.RowFilter.GetIntersectedFilteredInRows().Length.ToString) Console.WriteLine("") '********************************************* 'フィルタアウト(非表示)された行数 '********************************************* Console.WriteLine("フィルタアウト(非表示)された行数:" + FpSpread1.ActiveSheet.RowFilter.GetFilteredOutRowList().Count.ToString) Console.WriteLine("") For i As Integer = 0 To FpSpread1.ActiveSheet.RowFilter.GetFilteredOutRowList.Count - 1 '********************************************* 'フィルタアウト(非表示)された行インデックス '********************************************* Console.WriteLine("フィルタアウト(非表示)された行インデックス:" + Convert.ToString(FpSpread1.ActiveSheet.RowFilter.GetFilteredOutRowList().Item(i))) Next Console.WriteLine("") '********************************************* 'フィルタイン(表示)/アウト(非表示)された行 '********************************************* For i As Integer = 0 To FpSpread1.ActiveSheet.RowCount - 1 If FpSpread1.ActiveSheet.RowFilter.IsRowFilteredOut(i) = True Then Console.WriteLine("フィルタアウト(非表示)された行のデータ:" + FpSpread1.ActiveSheet.GetText(i, 0)) Else Console.WriteLine("フィルタイン(表示)されている行のデータ:" + FpSpread1.ActiveSheet.GetText(i, 0)) End If Next End Sub
フィルタリング文字列:North
フィルタイン(表示)された行数:3
フィルタアウト(非表示)された行数:4
フィルタアウト(非表示)された行インデックス:1
フィルタアウト(非表示)された行インデックス:2
フィルタアウト(非表示)された行インデックス:3
フィルタアウト(非表示)された行インデックス:6
フィルタイン(表示)されている行のデータ:North
フィルタアウト(非表示)された行のデータ:South
フィルタアウト(非表示)された行のデータ:East
フィルタアウト(非表示)された行のデータ:South
フィルタイン(表示)されている行のデータ:North
フィルタイン(表示)されている行のデータ:North
フィルタアウト(非表示)された行のデータ:West