SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ComponentZine(SPREAD)

2つのスプレッドシート間でデータをドラッグ&ドロップできる.NETアプリ

SPREAD for .NET 2.5J Windows Forms Editionコンポーネントの便利なテクニック

  • このエントリーをはてなブックマークに追加

GUIの作成

 GUIは簡単な設定です。fpSpreadコンポーネントを上下に2つ配置し、Labelコントロールで見出しをつけます。上のfpSpreadコンポーネントには、SPREADデザイナで列見出しとデータの入力をしておきます。

GUI
GUI
fpSpreadコンポーネントのタスクメニューから「SPREADデザイナ」を選ぶ
fpSpreadコンポーネントのタスクメニューから「SPREADデザイナ」を選ぶ
セルにデータを入力する
セルにデータを入力する
最後にツールバーの適用ボタンを押してデザイナを閉じる
最後にツールバーの適用ボタンを押してデザイナを閉じる

セルの条件付き書式機能を設定する

 セルの条件付き書式機能は、数値データに対して有効な機能で、セルに入力される値によって、セルの背景色や枠線、文字のサイズ・色などセルの書式を自動的に変えることができる機能です。

SetConditionalFormatメソッドで数値を判定する

 この機能をコードから設定する場合は、SetConditionalFormatメソッドを使用します。メソッドの書式は次のようになっています。

Function SetConditionalFormat( _
   ByVal row As Integer, _
   ByVal column As Integer, _
   ByVal style As NamedStyle, _
   ByVal op As ComparisonOperator, _
   ByVal condition As Expression _
) As Boolean

 引数rowcolumnには、書式を設定したいセル番地を行列番号で指定します。styleには、設定するセルの書式をNamedStyleオブジェクトとして指定します。opにはセルデータと次のconditionを比較するための演算子を「ComparisonOperator列挙型」のメンバで指定します。例えば、セル「1、2」の値が「1」から「59」までの間であれば、「styleCold」という名前付き書式を設定する場合は、次のように記述します。

Visual Basic
SetConditionalFormat(1, 2, styleCold, _
   FarPoint.Win.Spread.ComparisonOperator.Between, "1", "59")
C#.NET
SetConditionalFormat(1, 2, styleCold, 
   FarPoint.Win.Spread.ComparisonOperator.Between, "1", "59");

 比較条件に使う数値は、""で括って文字列として設定します。

 この「ComparisonOperator列挙型」の演算子を使うことで、いろいろな条件で数値データを違う書式でセルに表示させることができます。

NamedStyleオブジェクトで書式を設定する

 実際にセルの書式を設定するのは、NamedStyleオブジェクトをコンストラクタで作成して行います。

 NamedStyleクラスには、書式に関するメンバプロパティが用意されており、このプロパティで書式を設定し、作成したNamedStyleオブジェクトへの参照を、SetConditionalFormatメソッドの引数に指定します。

 例えば、セルの背景を青色に変える書式を作成するには、次のようにNamedStyleオブジェクトをコンストラクタで作成し、BackColorプロパティを変更します。

Visual Basic
Dim styleCold As New FarPoint.Win.Spread.NamedStyle()
styleCold.BackColor = Color.Blue
C#.NET
FarPoint.Win.Spread.NamedStyle styleCold
   = new FarPoint.Win.Spread.NamedStyle();
styleCold.BackColor = Color.Blue;

 このプログラムでは、1つのセルに3つの書式を設定します。これは、低いほうの血圧が「1-59」「60-90」「91以上」、高いほうの血圧が「1-109」「110-130」「131以上」の3パターンに区分けし、それぞれ通常値であればセルの背景色がシアンに、血圧が低ければセルの背景色を青色に、高ければ赤色に変更するようにします。

セルに入力された数値を3種類に色分けする
セルに入力された数値を3種類に色分けする

ドラッグ&ドロップの準備

 そして、2つのfpSpreadコンポーネントがドラッグ&ドロップでデータを操作できるように、上のfpSpreadコンポーネントでは「AllowDragDrop」プロパティを、下のfpSpreadコンポーネントでは「AllowDrop」プロパティをTrueに設定します。

Visual Basic
FpSpread1.AllowDragDrop = True
FpSpread2.AllowDrop = True
C#.NET
fpSpread1.AllowDragDrop = true;
fpSpread2.AllowDrop = true;

 そして、ここまでのコードを、フォームのLoadイベントハンドラに作成します。

Visual Basic
Private Sub Form1_Load(ByVal sender As System.Object, _
                    ByVal e As System.EventArgs) Handles MyBase.Load
    Dim styleCold As New FarPoint.Win.Spread.NamedStyle()
    Dim styleCool As New FarPoint.Win.Spread.NamedStyle()
    Dim styleHot As New FarPoint.Win.Spread.NamedStyle()

    styleCold.BackColor = Color.Blue
    styleCold.ForeColor = Color.White
    styleCool.BackColor = Color.Cyan
    styleHot.BackColor = Color.Red

    Dim i As Integer

    For i = 1 To FpSpread1.ActiveSheet.RowCount - 1
        FpSpread1.ActiveSheet.SetConditionalFormat(i, 2, styleCold, _
           FarPoint.Win.Spread.ComparisonOperator.Between, "1", "59")
        FpSpread1.ActiveSheet.SetConditionalFormat(i, 2, styleCool, _
           FarPoint.Win.Spread.ComparisonOperator.Between, "60", "90")
        FpSpread1.ActiveSheet.SetConditionalFormat(i, 2, styleHot, _
           FarPoint.Win.Spread.ComparisonOperator.GreaterThan, "91")
    Next

    For i = 1 To FpSpread1.ActiveSheet.RowCount - 1
        FpSpread1.ActiveSheet.SetConditionalFormat(i, 3, styleCold, _
         FarPoint.Win.Spread.ComparisonOperator.Between, "1", "109")
        FpSpread1.ActiveSheet.SetConditionalFormat(i, 3, styleCool, _
         FarPoint.Win.Spread.ComparisonOperator.Between, "110", "130")
        FpSpread1.ActiveSheet.SetConditionalFormat(i, 3, styleHot, _
         FarPoint.Win.Spread.ComparisonOperator.GreaterThan, "131")
    Next

    FpSpread1.AllowDragDrop = True
    FpSpread2.AllowDrop = True
End Sub
C#.NET
private void Form1_Load(object sender, EventArgs e)
{
    FarPoint.Win.Spread.NamedStyle styleCold
       = new FarPoint.Win.Spread.NamedStyle();
    FarPoint.Win.Spread.NamedStyle styleCool
       = new FarPoint.Win.Spread.NamedStyle();
    FarPoint.Win.Spread.NamedStyle styleHot
       = new FarPoint.Win.Spread.NamedStyle();

    styleCold.BackColor = Color.Blue;
    styleCold.ForeColor = Color.White;
    styleCool.BackColor = Color.Cyan;
    styleHot.BackColor = Color.Red;

    int i; 

    for(i=1; i<=fpSpread1.ActiveSheet.RowCount-1;i++){
        fpSpread1.ActiveSheet.SetConditionalFormat(i, 2, styleCold, 
          FarPoint.Win.Spread.ComparisonOperator.Between, "1", "59");
        fpSpread1.ActiveSheet.SetConditionalFormat(i, 2, styleCool, 
          FarPoint.Win.Spread.ComparisonOperator.Between, "60", "90");
        fpSpread1.ActiveSheet.SetConditionalFormat(i, 2, styleHot, 
          FarPoint.Win.Spread.ComparisonOperator.GreaterThan, "91");
    }

    for(i=1;i<=fpSpread1.ActiveSheet.RowCount-1;i++){
        fpSpread1.ActiveSheet.SetConditionalFormat(i, 3, styleCold, 
          FarPoint.Win.Spread.ComparisonOperator.Between, "1", "109");
        fpSpread1.ActiveSheet.SetConditionalFormat(i, 3, styleCool, 
          FarPoint.Win.Spread.ComparisonOperator.Between, "110", 
                                                          "130");
        fpSpread1.ActiveSheet.SetConditionalFormat(i, 3, styleHot, 
          FarPoint.Win.Spread.ComparisonOperator.GreaterThan, "131");
    }

    fpSpread1.AllowDragDrop = true;
    fpSpread2.AllowDrop = true;
}
ComparisonOperator列挙型
メンバ 説明
IsTrue 数式がTrueかどうかを判定します。
IsFalse 数式がFalseかどうかを判定します。
Between セル値が2つのパラメータ値の間にあるかどうかを判定します。
NotBetween セル値が2つのパラメータ値の間にないかどうかを判定します。
EqualTo セル値がパラメータ値と等しいかどうかを判定します。
NotEqualTo セル値がパラメータ値と等しくないかどうかを判定します。
GreaterThan セル値がパラメータ値より大きいかどうかを判定します。
LessThan セル値がパラメータ値より小さいかどうかを判定します。
GreaterThanOrEqualTo セル値がパラメータ値以上かどうかを判定します。
LessThanOrEqualTo セル値がパラメータ値以下かどうかを判定します。

次のページ
データのドラッグ処理 1

修正履歴

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
この記事の著者

瀬戸 遥(セト ハルカ)

8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1568 2010/06/17 12:59

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング