2021年2月3日にリリースした「SPREAD for Windows Forms(スプレッド)」の最新サービスパック「12.0J SP6」では、Excel互換の豊富なシェイプが追加され、Excelと同じようにシェイプのグループ化/解除ができるようになりました。
また、テーブル内でのフィルター処理を視覚的に実行できるExcel互換のスライサー機能が追加されています。これによりヘッダのドロップダウンボタンを操作しなくてもフィルター処理を行えます。
今回はこれら2つの新機能についてご紹介します。
Excel互換シェイプを使う
Excel互換シェイプの機能は、「拡張シェイプエンジン」によって実現されています。そのため、Excel互換のシェイプ機能を利用する前に拡張シェイプエンジン(デフォルトでは無効)を手動で有効にする必要があります。
拡張シェイプエンジンを有効にすることで、次の機能が使えるようになります。
- Excel互換のシェイプとSPREADの組み込みシェイプ
- シェイプのグループ化と解除(開発時/エンドユーザー操作)
- シェイプの塗りつぶしなどのスタイル設定
メモ
- 拡張シェイプエンジンの使い方と注意点についてヘルプで解説しています。
- 製品付属サンプル「SpreadWinDemo-shape-enhancedshape.cs」で拡張シェイプエンジンの使い方を紹介しています。
拡張シェイプエンジンの有効化
次のコードで拡張シェイプエンジンを有効にできます。
fpSpread1.Features.EnhancedShapeEngine = true;
SPREADデザイナ上で拡張シェイプエンジンを有効にする手順は次のとおりです。
- SPREADデザイナを起動する
- 右上のコンボボックスで[スプレッド]を選択する
- プロパティウィンドウでFeaturesのEnhancedShapeEngineをTrueにする
デザイナでシェイプをグループ化する
下の手順によって上のようなグループ化したシェイプが設定できます。
- SPREADデザイナを起動して、拡張シェイプエンジンを有効にする
- メニューから[挿入]-[図形]を選択する
- 表示されたリストから目的の図形を選択する
- メニューの[書式]-[図形のスタイル]でスタイルを設定する
- 同様にしてもう1つのシェイプを作成する
- 片方のシェイプをクリックする
- Ctrlキーを押下した状態で他方のシェイプをクリックする
- シェイプ上にマウスポインタを配置した状態で右クリックする
- コンテキストメニューで[グループ化]-[グループ化]を選択する
- メニューから[ファイル]-[適用して終了]を選択する
コードでシェイプを実装する
Excel互換のシェイプをコードで作成してグループ化する場合は、次のような手順になります。
- 拡張シェイプエンジンを有効にする
- シート(GrapeCity.Spreadsheet.IWorksheet)のShapesコレクションに新しいシェイプ(GrapeCity.Spreadsheet.IShape)を追加する
- 追加したシェイプのスタイルなどを設定する
- シェイプ範囲(GrapeCity.Spreadsheet.Slicers.IShapeRange)のGroupメソッドを呼び出す
2つのシェイプを作成してグループ化する例を下に示します。
using GrapeCity.Core;
using GrapeCity.Spreadsheet.Drawing;
// 拡張シェイプエンジンの有効化
fpSpread1.Features.EnhancedShapeEngine = true;
// シェイプの作成
IShape shape1 = fpSpread1.AsWorkbook().ActiveSheet.Shapes.AddShape(
AutoShapeType.FivePointedStar, 100, 50, 200, 200);
shape1.Name = "Star";
shape1.Fill.BackColor.Color = SchemeColor.CreateArgbColor(
System.Drawing.Color.Yellow.ToArgb());
IShape shape2 = fpSpread1.AsWorkbook().ActiveSheet.Shapes.AddShape(
AutoShapeType.Sun, 400, 50, 200, 200);
shape2.Name = "Sun";
shape2.Fill.BackColor.Color = SchemeColor.CreateArgbColor(
System.Drawing.Color.Orange.ToArgb());
// シェイプのグループ化
IGroupShape groupShape = fpSpread1.AsWorkbook().ActiveSheet.Shapes.Range(
new string[] { "Star", "Sun" }).Group();
Excel互換スライサーを使う
これまで、テーブル内でフィルタリング操作を行うには、ヘッダのドロップダウンボタンをクリックしてフィルタダイアログを表示する必要がありました。それに対してスライサーでは、Excelのスライサーと同じようにフィルタ項目が常に表示されているので、それをクリックするだけですぐに対象列をフィルタリングできます。
なお、このスライサーは先に紹介した拡張シェイプエンジンを使って実現しているため、この機能を使うときも事前に拡張シェイプエンジンを有効にしておく必要があります。
メモ
- スライサーはテーブル内でのみ使用できます
- 製品付属サンプル「SpreadWinDemo-sheet-slicers.cs」でスライサーの使い方を紹介しています。
デザイナでスライサーを設定する
下の手順によって上のようなテーブルとスライサーが設定できます。
- SPREADデザイナを起動して、拡張シェイプエンジンを有効にする
- テーブルにするセル範囲を選択する
- メニューから[挿入]-[テーブル]を選択する
- テーブルをクリックする
- メニューから[挿入]-[スライサー]を選択する
- スライサーを作成する列をチェックする
- メニューから[ファイル]-[適用して終了]を選択する
コードでスライサーを実装する
スライサーをコードで作成する場合は、次のような手順になります。
- 拡張シェイプエンジンを有効にする
- テーブル(GrapeCity.Spreadsheet.ITable)を作成する
- テーブルを指定してキャッシュ(GrapeCity.Spreadsheet.Slicers.ISlicerCache)を作成する
- 列を指定してキャッシュにスライサー(GrapeCity.Spreadsheet.Slicers.ISlicer)を追加する
テーブルの第1列と第2列に対応したスライサーを設定する例を下に示します。
using GrapeCity.Spreadsheet;
using GrapeCity.Spreadsheet.Slicers;
// 拡張シェイプエンジンの有効化
fpSpread1.Features.EnhancedShapeEngine = true;
// データの作成と設定
object[,] data = new object[10, 2];
for (var i = 0; i < 10; i++)
{
data[i, 0] = $"A{i % 3}";
data[i, 1] = $"B{i % 5}";
}
fpSpread1.ActiveSheet.SetArray(0, 0, data);
// テーブルの作成
ITable table = fpSpread1.AsWorkbook().ActiveSheet.Tables.Add("A1:B10");
// スライサーの作成
ISlicerCache slicerCache1 = fpSpread1.AsWorkbook().SlicerCaches.Add(table, 0);
ISlicer slicer1 = slicerCache1.Slicers.Add(
fpSpread1.AsWorkbook().ActiveSheet, "slicer1", table.TableColumns[0].Name,
200, 150, 200, 200);
ISlicerCache slicerCache2 = fpSpread1.AsWorkbook().SlicerCaches.Add(table, 1);
ISlicer slicer2 = slicerCache2.Slicers.Add(
fpSpread1.AsWorkbook().ActiveSheet, "slicer2", table.TableColumns[1].Name,
450, 150, 200, 200);
おわりに
シェイプとスライサー以外にもSPREAD for Windows Formsのサービスパック12.0J SP6で追加された機能があります。これらの新機能やSPREADの機能全般について動作を確認できるデモ版もご用意していますので、以下のページでご確認いただければ幸いです。