罫線

罫線はワークシートAPIを直接呼び出すか、アクションを実行することでプログラム的に設定できます。

罫線スタイル

以下の罫線スタイルが現在のバージョンのReoGridでサポートされています。

264

罫線スタイルは BorderLineStyle 列挙型として定義されています。

罫線の位置

罫線は範囲に対して設定する必要があります。範囲にセルが1つしか含まれない場合でも同様です。罫線の位置を指定するには、BorderPositions 列挙型とそのビット結合値を使用します。

266

罫線の設定

ワークシート内の特定の範囲に罫線を適用するには、SetRangeBorders メソッドを使用します。

var sheet = reoGridControl.CurrentWorksheet;

// Applying borders to the outside of a specified range with a custom style
sheet.SetRangeBorders("B3:D7", BorderPositions.Outside,
  new RangeBorderStyle
  {
    Color = SolidColor.Magenta,
    Style = BorderLineStyle.BoldSolid,
  });

18_2

アクションによる罫線の設定

アクションを使用して範囲内に罫線を適用すると、操作を元に戻すことができます。

reoGridControl.DoAction(reoGridControl.CurrentWorksheet,
  new SetRangeBorderAction(new RangePosition(2, 1, 5, 3),
    BorderPositions.All,
    new RangeBorderStyle {
      Color = SolidColor.Red,
      Style = BorderLineStyle.Dashed
    })
);

19_2

罫線情報の取得

ワークシート内の特定の範囲に適用された罫線の詳細を取得するには、GetRangeBorders メソッドを使用します。

// Retrieving border information for a specified range
RangeBorderInfoSet borderInfoSet = sheet.GetRangeBorders("A1:D5");

GetRangeBorders メソッドは指定された範囲内の罫線を分析し、RangeBorderInfoSet を返します。このセットには範囲全体で一貫して適用されている罫線スタイルのインスタンスが含まれます。

範囲内でスタイルが異なる罫線を特定するには、RangeBorderInfoSetNonUniformPos プロパティを確認します。このプロパティは、罫線スタイルが主要なスタイルと異なる位置を示します。

罫線の反復処理

指定された範囲内のすべての罫線を列挙するには、ワークシートの IterateBorders メソッドを使用します。

メソッド定義

IterateBorders(RowOrColumn direction, RangePosition range, Func<int, int, int, RangeBorderStyle, bool> iterator);

パラメーター

  • direction - 反復モードを指定します:
    • RowOrColumn.Row はすべての水平罫線を反復処理します。
    • RowOrColumn.Column はすべての垂直罫線を反復処理します。
    • RowOrColumn.Both は行と列の両方を含むすべての罫線を反復処理します。
  • range: 罫線が反復処理される対象範囲。
  • iterator: ワークシートから取得したすべての罫線を検査するためのコールバック関数。この関数は以下の引数を受け取ります:
    • int Row: 罫線が位置する行番号。
    • int Column: 罫線が位置する列番号。
    • int Span: この開始位置から同じスタイルを共有する連続した罫線の数。
    • RangeBorderStyle - 罫線の色とスタイルの詳細を含みます。
    • bool 戻り値: true を返すと反復処理を続行し、false を返すと終了します。

このメソッドにより、特定の範囲内の罫線プロパティの詳細な検査と操作が可能になり、反復処理中に遭遇した罫線の特性に基づいてカスタムロジックを適用できます。

例えば、すべての水平罫線を反復処理し、セルの位置に罫線がある場合は赤い背景でマークします。

// Setting horizontal borders within a specified range
worksheet.Ranges["C3:F10"].BorderInsideHorizontal = RangeBorderStyle.BlackSolid;

// Iterating over horizontal borders in the entire worksheet range
worksheet.IterateBorders(RowOrColumn.Row, RangePosition.EntireRange, (r, c, span, border) =>
{
  // Applying a red background to cells that have borders
  worksheet.Cells[r, c].Style.BackColor = Color.LightCoral;

  return true; // Continue iterating
});

277

すべての垂直罫線を反復処理します。

// set borders
worksheet.Ranges["C3:F10"].BorderInsideVertical = RangeBorderStyle.BlackSolid;

// iterate borders
worksheet.IterateBorders(RowOrColumn.Column, RangePosition.EntireRange, (r, c, span, border) =>
{
  worksheet.Cells[r, c].Style.BackColor = Color.LightCoral;
  return true;
});

278

行と列の両方の罫線を含むすべての罫線を反復処理します。

// set borders
worksheet.Ranges["C3:F10"].BorderOutside = RangeBorderStyle.BlackBoldSolid;
worksheet.Ranges["C3:F10"].BorderInsideHorizontal = RangeBorderStyle.BlackSolid;
worksheet.Ranges["C3:F10"].BorderInsideVertical = RangeBorderStyle.BlackDotted;

// iterate borders
worksheet.IterateBorders(RowOrColumn.Both, RangePosition.EntireRange, (r, c, span, border) =>
{
  worksheet.Cells[r, c].Style.BackColor = Color.LightCoral;
  return true;
});

279

罫線の削除

ワークシートから罫線を削除するには、RemoveRangeBorders メソッドを使用します。

// Removing all borders from a specified range within the worksheet
sheet.RemoveRangeBorders(new RangePosition(2, 1, 5, 1), BorderPositions.All);

または、罫線スタイルを RangeBorderStyle.Empty に設定しても罫線を削除できます。

// Setting the border style to 'Empty' for a specified range to remove borders
sheet.SetRangeBorders(new RangePosition(2, 1, 5, 3), BorderPositions.All, RangeBorderStyle.Empty);

アクションによる罫線の削除

操作を元に戻す機能付きで罫線を削除するには、DoAction メソッドを次のように使用します。

reoGridControl.DoAction(reoGridControl.CurrentWorksheet,
  new RemoveRangeBorderAction(new RangePosition(2, 1, 5, 1), ReoGridBorderPos.All));

このアクションは Undo メソッドを呼び出して取り消すことができます。

// Undoing the border removal operation
reoGridControl.Undo();

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