ワークシート
ワークシートは、行と列のヘッダー、セル、アウトラインで構成されています。
ワークシートの取得、作成、削除など
ワークシートの取得、作成、削除や管理するための詳しい内容は、「ワークブック(Workbook)」をご覧ください。
現在表示中のワークシートを取得するためのソースコードは以下の通りです。
var sheet = reoGridControl.CurrentWorksheet;
ファイルの読み込みと保存
ファイルやストリームからワークシートを読み込んだり、保存したりすることができます。現時点で ReoGrid では Excel フォーマット、RGF フォーマット、CSV フォーマット、HTMLのエクスポートに対応しています。
ワークシートを読み込む場合ワークシートのメソッド Load
を利用します。ワークシートの内容を保存する場合 Save
メソッドを利用します。
詳しくは、「ファイルフォーマット」をご覧ください。
列行数の設定
初期状態のワークシートは 200 行× 100 列のセルを含んでいます。行列の数はいつでも自由に調整できます。調整したい場合、以下のメソッドを利用します。
SetRows
行数を設定するSetColumns
列数を設定するResize
行列数を設定する
例:
sheet.Resize(行数, 列数);
メソッドを利用するほか、Rows
と Columns
のプロパティを利用しても行列数の設定ができます。
sheet.Rows = 10000;
sheet.Columns = 30;
ReoGrid は、行数は最大 1,048,576、列数は最大 32,768 までサポートしています。
行の高さと列幅の設定
行の高さの設定
デフォルトの場合、行の高さは 20 ピクセル、列の幅は 70 ピクセルです。行の高さを調整したい場合、ワークシートの SetRowsHeight
メソッドを利用するか、行ヘッダー RowHeader
オブジェクトを取得してその Height
プロパティを設定するかのいずれかで調整できます。行ヘッダー RowHeader
オブジェクトについては「行列ヘッダーの取得」をご覧ください。
SetRowsHeight
メソッドには三つのパラメータを渡す必要があります。
- 設定開始行のインデックス(1行目はゼロ)
- 設定する行の数(1行目から10行目までなら10を渡す)
- 行の高さ(ピクセル)
例:
sheet.SetRowsHeight(0, 10, 40);
列幅の設定
行の高さと同じく、列幅の設定も二つの方法があります。
sheet.SetColumnsWidth(0, 10, 100);
行列ヘッダーの取得
ワークシートの RowHeaders
および ColumnHeaders
プロパティを使って、行列ヘッダーオブジェクトの取得ができます。
var rowHeader = sheet.RowHeaders[0]; // 行ヘッダーオブジェクトを取得
var colHeader = sheet.ColumnHeaders["A"]; // 列のヘッダーオブジェクトを取得
行列の番号を指定するには、数字のインデックスを渡すほか、文字列のアドレスコード「A」を渡すこともできます。Aは1列目です。
行列ヘッダーのプロパティを活用
行列ヘッダーは様々なプロパティを提供しています。先ほどの行の高さと列幅の設定は、行列ヘッダーのプロパティでも設定できます。
行の高さの設定:
var rowHeader = sheet.RowHeaders[0]; // 行ヘッダーオブジェクトを取得
rowHeader.Height = 30; // 行の高さを設定
列幅の設定:
var colHeader = sheet.ColumnHeaders["A"]; // 列のヘッダーオブジェクトを取得
colHeader.Width = 100; // 列幅の設定
複数行列設定の効率化
ヘッダーオブジェクトを利用して行の高さと列幅を設定するより、SetRowsHeight
と SetColumnsWidth
メソッドを利用したほうが、多くの行や列を一括で設定できますので、より効率が良いでしょう。
sheet.SetColumnsWidth(0, sheet.ColumnCount, 20); // 全ての列幅を20ピクセルに設定
sheet.SetRowsHeight(0, sheet.RowCount, 16); // 全ての行高さを16ピクセルに設定
ヘッダーの表示文言の変更
ヘッダーオブジェクトの Text
プロパティの変更によって行列ヘッダーの表示文言を変更できます。
colHeader.Text = "プロダクト";
rowHeader.Text = "製品";
行ヘッダー部分の幅の変更
行ヘッダー部分は下図のピンクの範囲です。この範囲の幅を調整したい場合、ワークシートの RowHeaderWidth
を利用します。
例:
sheet.RowHeaderWidth = 100;
行列ヘッダーの表示/非表示
行ヘッダーを非表示にしたい場合、以下の設定を行います。
worksheet.SetSettings(WorksheetSettings.View_ShowRowHeader, false);
列ヘッダーを非表示したい場合、以下の設定を行います。
worksheet.SetSettings(WorksheetSettings.View_ShowColumnHeader, false);
設定の値を true
に設定するとヘッダーを表示します。
行列ポジション情報と範囲情報
ReoGrid では、セルや範囲を特定するため、セルポジション CellPosition
と範囲ポジション RangePosition
構造体をよく用います。
- CellPosition - 二次元のポジション情報、例:
new CellPosition(2, 3)
- RangePosition - 範囲のポジション情報、例:
new RangePosition(2, 3, 2, 2)
この二つの構造体を利用すれば、セルや範囲の指定がより簡単にできます。
var pos = new CellPosition(1, 0);
sheet[pos] = "製品B";
範囲情報の使用例:
var range = new RangePosition("A1:E1");
sheet[range] = new object[] { "A", "B", "C", "D", "E" };
ReoGrid で提供される多くの関数はこの二つの構造体をパラメータとして利用します。
罫線設定
罫線の設定はセルと範囲とも、範囲単位で指定します。また、罫線を設定する際に範囲に対する相対位置を指定する必要があります。
範囲の外側なら、Outside
を指定します。内側のみの場合、InsideAll
を指定します。外側と内側で違う罫線のスタイルを設定する場合、関数を2回呼び出します。
sheet.SetRangeBorders("A1:D4", ReoGridBorderPos.Outside, new ReoGridBorderStyle
{
Color = Color.Black, // 黒い
Style = BorderLineStyle.Solid, // 線のスタイル:実線
});
sheet.SetRangeBorders("A1:D4", ReoGridBorderPos.InsideAll, new ReoGridBorderStyle
{
Color = Color.Black, // 黒い
Style = BorderLineStyle.Dotted, // 線のスタイル:点線
});
罫線について詳しくは、「罫線」をご覧ください。
セルのスタイル設定
単一セルの塗りつぶしの設定
sheet.Cells["A1"].Style.BackColor = Color.LightGreen;
複数セルのスタイルの一括設定
罫線の設定と同じように、セルの設定の場合にも範囲を指定します。また、複数のスタイル設定を集合として一つのスタイルオブジェクトにまとめて、区分プロパティFlag
を設定します。
背景色を設定する場合Flag
をBackColor
に指定、フォントを太字に設定する場合FontStyleBold
を指定します。
sheet.SetRangeStyles("A2:D2", new WorksheetRangeStyle
{
Flag = PlainStyleFlag.BackColor | PlainStyleFlag.FontStyleBold, // 背景色と太字を設定する
Bold = true, // 太字
BackColor = Color.LightYellow, // 背景色
});
セルスタイルについて詳しくは、「セルスタイル」をご覧ください。
セルの結合
sheet.MergeRange("B3:D4");
結合されたセルの値は一つ目のセルの値となります。
結合したセルを解除する場合、関数UnmergeRange
を利用します。この関数は、指定された範囲内のすべての結合セルを解除します。
行列の制御
行列の挿入
sheet.InsertRows(0, 1); // 0の位置から1行を挿入する
挿入の後、データとスタイルを与えます。
// データ設定
sheet["A1:D1"] = new object[] { "製品", "販売状況", "バージョン", "保守状況" };
// スタイル設定
sheet.SetRangeStyles("A1:D1", new ReoGridStyleObject
{
Flag = PlainStyleFlag.BackColor | PlainStyleFlag.FontStyleBold,
BackColor = Color.LightCyan, // 青い色
Bold = true, // 太字
});
// 罫線設定
sheet.SetRangeBorders("A1:D1", ReoGridBorderPos.Outline, ReoGridBorderStyle.SolidBlack);
sheet.SetRangeBorders("A1:D1", ReoGridBorderPos.InsideVertical, ReoGridBorderStyle.DottedBlack);
上記のサンプルコードの一部を改修すると、以下の結果が得られます。
列の挿入は関数 InsertColumns
を利用します。
行列の削除
sheet.DeleteRows(2, 2); // 2行目から、2行を削除します(2行目を含む)
sheet.DeleteColumns(5, 3); // 5列目から、3列を削除します(5列目を含む)
文字位置の配置
例えば以下のようなスプレッドシートがあります。
セルの背景色設定と同じ関数 SetRangeStyles
を利用して、列 B と列 E の文字を中央揃えに設定します。
sheet.SetRangeStyles("B1:B10", new ReoGridStyleObject
{
Flag = PlainStyleFlag.HorizontalAlign, // 水平方向文字配置
HAlign = ReoGridHorAlign.Center, // 中央揃え
});
sheet.SetRangeStyles("E1:E10", new ReoGridStyleObject
{
Flag = PlainStyleFlag.HorizontalAlign, // 水平方向文字配置
HAlign = ReoGridHorAlign.Center, // 中央揃え
});
データ書式の設定
販売開始日と保守終了日を日本語の日付として表示できるように設定します。書式設定の利用には以下の名前範囲の宣言が必要です。
using unvell.ReoGrid.DataFormat;
書式区分を CellDataFormatFlag.DateTime に指定し、パラメータで書式の詳細を設定します。
sheet.SetRangeDataFormat("C2:C10", CellDataFormatFlag.DateTime,
new DateTimeDataFormatter.DateTimeFormatArgs
{
CultureName = "ja-JP",
Format = "yyyy年MM月dd日",
});
sheet.SetRangeDataFormat("F2:F10", CellDataFormatFlag.DateTime,
new DateTimeDataFormatter.DateTimeFormatArgs
{
CultureName = "ja-JP",
Format = "yyyy年MM月dd日",
});
書式について詳しくは、「書式」をご覧ください。
セル型の利用
ReoGrid では様々な入力方法とセル型を提供しています。詳しくは、「様々な入力方法とセル型」をご覧ください。
ReoGrid では、よく使われるセル型を内蔵ボディ型として提供しています。ボタン、ラジオボタン、チェックボックス、ハイパーリンクなどの部品をセルの中に置くことができます。詳しくは、「内蔵セル型」をご覧ください。
Namespaceの利用を宣言します。
using unvell.ReoGrid.CellTypes;
ボタンを置く
ボタンをセルに置くには、ButtonCell
を作成して指定セルに置きます。
var button1 = new ButtonCell("ボタン");
カスタマイズしたセル型の作成
カスタマイズしたセル型作成について詳しくは、「カスタマイズしたセル型」をご覧ください。
シートの操作制御
ReoGrid で提供される様々なイベントを利用したり、カスタマイズセル型を作成したりすることによって、ワークシートの操作をより細かく制御することができます。以下の機能を組み合わせて利用すると、操作をカスタマイズすることができます。
- ワークシートのイベントの捕捉と処理
- カスタマイズセルボディを作成し、セルの中の動きをすべて制御する
- シートの設定区分
WorksheetSettings
を利用し制御区分を設定する
ワンクリックで編集したい場合
デフォルトではセルの上でダブルクリックするとセルを編集しますが、ワンクリックで編集したい場合 CellMouseDown
イベントを利用できます。セルをクリックすると編集モードになります。
sheet.CellMouseDown += (s, e) => sheet.StartEdit(e.CellPosition);
セルや範囲の編集を禁止する
以下のコードはA1セルを編集させないように制御します。
sheet.BeforeCellEdit += (s, e) => e.IsCancelled = e.Cell.Position.Equals("A1");
フィルターとデータの並び替え
ワークシートにフィルターを追加できます。
フィルターとデータの並び替えについて詳しくは、「フィルターと並び替え」をご覧ください。
行列の固定
ワークシートの行と列を固定したい場合、ワークシートの FreezeToCell
メソッドを利用します。
詳しくは、「行列の固定」をご覧ください。
拡大縮小
ワークシートを拡大縮小して表示することができます。詳しくは、「拡大縮小」をご覧ください。