MESCIUS SPREAD for Windows Forms 17.0J サンプルコード集
結果の取得

IRowFilterインタフェースより提供されている各メソッド呼び出しよって様々な行フィルタリング結果を取得することができます。以下のサンプルでは「表示されている行数」や「非表示となった行インデックス」などの取得方法を紹介します。(便宜上、スタイルフィルタを適用しています)

【実行例】 

※取得結果例については頁末尾を参照

取得例

  • 本機能は新しいスタイルシステムでは有効になりません。LegacyBehaviorsプロパティをAllにするなどStyleを含めた状態で実行してください。?
  • シート上にてフィルタリングされた行は一時的に非表示となるだけで、実際のデータには影響を与えません。そのため、Excelファイルへのエクスポート時には全ての行情報が出力されます。

※出力例については本コンテンツ末尾を参照

 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

 

 


© MESCIUS inc. All rights reserved.