異なるSPREAD間で数式を設定出来ますか?

文書番号 : 28813     文書種別 : 使用方法     最終更新日 : 2010/04/02
文書を印刷する
対象製品
SPREAD for Windows Forms 5.0J
詳細
同一コントロール上の異なるシート間で数式を設定することは可能ですが、異なるコントロール間で数式を設定することはできません。

代替策として、数式を使用してSPREAD1のセルに一時的に値を算出ておき、当セルのデータに変更が加えられた際に、SPREAD2のセルに値をコピーする方法が考えられます。

◎サンプルコード(VB)
Dim WithEvents datamodel As FarPoint.Win.Spread.Model.DefaultSheetDataModel

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  ' SPREAD1に値をセットします
  For i As Integer = 0 To 9
    FpSpread1.ActiveSheet.SetValue(i, 0, i)
  Next

  ' SUM関数(すべての引数値の和)を設定します
  FpSpread1.ActiveSheet.SetFormula(10, 0, "SUM(A1:A10)")
  FpSpread1.ActiveSheet.Cells(10, 0).BackColor = Color.LightCyan

  ' 初期値をSPREAD2にセットします
  Dim obj As Object = FpSpread1.ActiveSheet.GetValue(10, 0)
  FpSpread2.ActiveSheet.SetValue(0, 0, obj)

  datamodel = FpSpread1.ActiveSheet.Models.Data
End Sub

Private Sub datamodel_Changed(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.Model.SheetDataModelEventArgs) Handles datamodel.Changed
  ' 数式を設定したセルの場合
  If e.Row = 10 And e.Column = 0 Then
    Dim obj As Object = datamodel.GetValue(e.Row, e.Column)
    FpSpread2.ActiveSheet.SetValue(0, 0, obj)
  End If
End Sub

◎サンプルコード(C#)
FarPoint.Win.Spread.Model.DefaultSheetDataModel datamodel;

private void Form1_Load(object sender, EventArgs e)
{
  // SPREAD1に値をセットします
  for (int i = 0; i < 10; i++)
  {
    fpSpread1.ActiveSheet.SetValue(i, 0, i);
  }

  // SUM関数(すべての引数値の和)を設定します
  fpSpread1.ActiveSheet.SetFormula(10, 0, "SUM(A1:A10)");
  fpSpread1.ActiveSheet.Cells[10, 0].BackColor = Color.LightCyan;

  // 初期値をSPREAD2にセットします
  object obj = fpSpread1.ActiveSheet.GetValue(10, 0);
  fpSpread2.ActiveSheet.SetValue(0, 0, obj);

  datamodel = (FarPoint.Win.Spread.Model.DefaultSheetDataModel)fpSpread1.ActiveSheet.Models.Data;
  datamodel.Changed += new FarPoint.Win.Spread.Model.SheetDataModelEventHandler(this.datamodel_Changed);
}

private void datamodel_Changed(object sender, FarPoint.Win.Spread.Model.SheetDataModelEventArgs e)
{
  // 数式を設定したセルの場合
  if (e.Row == 10 && e.Column == 0)
  {
    object obj = fpSpread1.ActiveSheet.GetValue(e.Row, e.Column);
    fpSpread2.ActiveSheet.SetValue(0, 0, obj);
  }
}

関連情報
キーワード
「同期」

この文書は、以前は次のFAQ IDで公開されていました : 12990