MESCIUS SPREAD for Windows Forms 17.0J > 開発者ガイド > 数式 > 視覚化関数の作成と使用 |
SPREAD for Windows Forms は、スプレッドシートでデータ視覚化の機能に対応しています。
データ視覚化関数は、ユーザーがカスタムロジック(ロジックのペイントまたはスタイルフォーマットロジックの適用)を追加して、カスタム関数のような数式で使用できるビジュアルをセルに作成できるようにするカスタム関数です。 FunctionVisualizerクラスのIsVisualプロパティを使用して、スプレッドシートで使用されている関数がデータ視覚化関数であるかどうかを示すことができます。
スプレッドシートにてデータ視覚化の関数を作成するには、ユーザーが最初にFunctionVisualizerクラスを継承したカスタムDataVisualizerクラスを作成する必要があります。そして、スプレッドシートにデータ視覚化の関数を操作させるには、FunctionVisualizerクラスのApplyFormat()メソッドとIsShowCell()メソッドを使用することができます。
次のサンプルコードは、データ視覚化関数を作成する方法を示します。
C# |
コードのコピー
|
---|---|
public class ErrorFunctionVisualizer : FunctionVisualizer { protected override void PaintCell(System.Drawing.Graphics graphics, System.Drawing.Rectangle rect, object cellValue, ref StyleFormat styleFormat, IWorksheet worksheet) { rect.Width--; rect.Height--; if (cellValue is VisualizationData visualizationData) { IEvaluationContext context = worksheet.Workbook.WorkbookSet. CalculationEngine.EvaluationContext; if (visualizationData.Value.GetValue(context) is GrapeCity.CalcEngine.CalcError) { System.Drawing.Pen pen = new System.Drawing.Pen(System.Drawing.ColorTranslator. FromHtml(visualizationData.Parameters[1].GetText(context))); pen.Width = 2; graphics.DrawEllipse(pen, rect); pen.Dispose(); } } else if (cellValue is GrapeCity.CalcEngine.CalcError) { graphics.DrawRectangle(System.Drawing.Pens.Red, rect); } } } |
データ視覚化関数を使用する際、ユーザーが数式内に使用する関数に任意の名前を割り当てることができますが、データ視覚化関数の名前の前に「VF」の接頭辞を付ける必要があります。
次のサンプルコードは、スプレッドシートに既存のデータ視覚化関数を使用する方法を示します。
C# |
コードのコピー
|
---|---|
private void DataVisualizationFunction_Load(object sender, EventArgs e) { /* データ視覚化関数を使用します。 FunctionVisualizerを使用するには、 VisualFunctionの新しいインスタンスを作成し、コンストラクタで FunctionVisualizerの新しいインスタンスを渡す必要があります。 */ fpSpread1.AddCustomFunction(new VisualFunction("ERROR", 1, 2, FunctionAttributes.Variant, new ErrorFunctionVisualizer())); /* カスタムVisualFunctionをセル数式に使用できるには、 VisualFunctionの名前の前に「VF」の接頭辞を付ける必要があります。*/ fpSpread1.AsWorkbook().ActiveSheet.Cells["B2"].Formula = "VF.ERROR(1/0, A1)"; fpSpread1.AsWorkbook().ActiveSheet.Cells["A1"].Value = System.Drawing.ColorTranslator.ToHtml(System.Drawing.Color.Red); } |