条件付きスタイル

条件付きスタイルを使用すると、数式で評価された条件に基づいてセルの外観を動的に変更できます。条件が満たされると、指定されたスタイルがターゲットセルに自動的に適用されます。これはデータの可視化、ハイライト、アラートに便利です。

条件付きスタイルルールの作成

条件付きスタイルルールは3つのコンポーネントで構成されます:

  1. 数式true または false に評価される数式
  2. 適用範囲 — スタイルを適用するセルの範囲
  3. スタイル — 条件が真の場合に適用する WorksheetRangeStyle
var rule = new unvell.ReoGrid.ConditionalStyle.Rule(
    formula: "A1>100",
    applyRange: "A1:A100",
    style: new WorksheetRangeStyle
    {
        Flag = PlainStyleFlag.FillColor | PlainStyleFlag.TextColor,
        BackColor = Color.LightGreen,
        TextColor = Color.DarkGreen,
    }
);

ルールのプロパティ

プロパティ説明
Formulastringスタイルを適用するタイミングを決定する数式
ApplyRangeRangePositionスタイルが適用されるセルの範囲
StyleWorksheetRangeStyle条件が真の場合に適用されるスタイル
NegativeNumberStyleWorksheetRangeStyleセルの値が負の数の場合に適用されるスタイル
Disabledbooltrue に設定するとこのルールを一時的に無効化

コンストラクタのオーバーロード

// Using string range address
new Rule(string formula, string applyRange, WorksheetRangeStyle style,
    WorksheetRangeStyle negativeNumberStyle = null)

// Using RangePosition
new Rule(string formula, RangePosition applyRange, WorksheetRangeStyle style,
    WorksheetRangeStyle negativeNumberStyle = null)

ワークシートへのルールの追加

ワークシートの ConditionalStyles コレクションを使用して、ルールの追加、削除、管理を行います:

var sheet = grid.CurrentWorksheet;

// Add a rule: highlight cells where value > 100
sheet.ConditionalStyles.Add(new Rule(
    formula: "A1>100",
    applyRange: "A1:A100",
    style: new WorksheetRangeStyle
    {
        Flag = PlainStyleFlag.FillColor,
        BackColor = Color.Yellow,
    }
));

複数のルール

複数のルールを追加できます。ルールは順番に評価され、複数のルールが同じセルに適用されることがあります:

// Rule 1: Green background for values > 80
sheet.ConditionalStyles.Add(new Rule(
    formula: "B1>80",
    applyRange: "B1:B50",
    style: new WorksheetRangeStyle
    {
        Flag = PlainStyleFlag.FillColor | PlainStyleFlag.TextColor,
        BackColor = Color.LightGreen,
        TextColor = Color.DarkGreen,
    }
));

// Rule 2: Red background for values < 20
sheet.ConditionalStyles.Add(new Rule(
    formula: "B1<20",
    applyRange: "B1:B50",
    style: new WorksheetRangeStyle
    {
        Flag = PlainStyleFlag.FillColor | PlainStyleFlag.TextColor,
        BackColor = Color.LightCoral,
        TextColor = Color.DarkRed,
    }
));

負の数のスタイル

ルールには負の数用の個別のスタイルを設定できます:

sheet.ConditionalStyles.Add(new Rule(
    formula: "C1<>0",
    applyRange: "C1:C100",
    style: new WorksheetRangeStyle
    {
        Flag = PlainStyleFlag.TextColor,
        TextColor = Color.Black,
    },
    negativeNumberStyle: new WorksheetRangeStyle
    {
        Flag = PlainStyleFlag.TextColor,
        TextColor = Color.Red,
    }
));

ルールの管理

ルールの削除

sheet.ConditionalStyles.Remove(rule);

すべてのルールをクリア

sheet.ConditionalStyles.Clear();

ルール数の確認

int count = sheet.ConditionalStyles.Count;

ルールの反復処理

foreach (var rule in sheet.ConditionalStyles)
{
    Console.WriteLine($"Formula: {rule.Formula}, Range: {rule.ApplyRange}");
}

ルールの一時的な無効化

rule.Disabled = true;   // Disable
rule.Disabled = false;  // Re-enable

条件付きスタイルの再適用

条件付きスタイルはセルの値が変更されると自動的に評価されます。手動で再評価をトリガーする必要がある場合(例:一括データ更新後)は、以下を呼び出します:

sheet.ApplyAllConditionalStyles();

更新の一時停止と再開

パフォーマンスのため、一括操作中に条件付きスタイルの更新を一時停止できます:

// Suspend updates
sheet.SuspendConditionalStyleUpdate = true;

// Perform bulk data operations
for (int i = 0; i < 10000; i++)
{
    sheet[i, 0] = i;
}

// Resume updates and re-apply
sheet.SuspendConditionalStyleUpdate = false;
sheet.ApplyAllConditionalStyles();

適用されたスタイルの確認

セルでの確認

各セルには、現在適用されている条件付きスタイルのリストを含む ConditionalStyles プロパティがあります:

var cell = sheet.Cells["A1"];
if (cell.ConditionalStyles != null && cell.ConditionalStyles.Count > 0)
{
    foreach (var style in cell.ConditionalStyles)
    {
        Console.WriteLine($"Applied: BackColor={style.BackColor}");
    }
}

イベント:条件付きスタイルセルの変更

条件付きスタイルの影響を受けるセルの変更を監視します:

sheet.ConditionalStyleCellChanged += (s, e) =>
{
    Console.WriteLine("Conditional style cells were updated");
};

完全な例

売上データを色分けルールでハイライトする完全な例です:

var sheet = grid.CurrentWorksheet;

// Set up headers
sheet["A1"] = "Product";
sheet["B1"] = "Sales";

// Set up data
sheet["A2:A6"] = new object[] { "Widget A", "Widget B", "Widget C", "Widget D", "Widget E" };
sheet["B2:B6"] = new object[] { 150, 45, 88, 12, 200 };

// Rule: High performers (green)
sheet.ConditionalStyles.Add(new Rule(
    formula: "B2>=100",
    applyRange: "A2:B6",
    style: new WorksheetRangeStyle
    {
        Flag = PlainStyleFlag.FillColor | PlainStyleFlag.FontStyleBold,
        BackColor = Color.LightGreen,
        Bold = true,
    }
));

// Rule: Low performers (red)
sheet.ConditionalStyles.Add(new Rule(
    formula: "B2<50",
    applyRange: "A2:B6",
    style: new WorksheetRangeStyle
    {
        Flag = PlainStyleFlag.FillColor | PlainStyleFlag.TextColor,
        BackColor = Color.MistyRose,
        TextColor = Color.DarkRed,
    }
));

関連トピック


ページの内容は役に立ちましたか?