Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2009年06月07日] [更新 2013年11月28日] ワード操作フォームEx
ワード操作フォームEx   参考コード類
表のセルに計算式を定義
動作確認等 Windows 7 U64(SP1) + Delphi XE Pro + Word 2010







表のセルに計算式を定義


表のセルに計算式を定義することができます.
ただしこの計算式は,エクセルのセルとは違い,参照元のセルの値が変更となっても自動計算はしてくれません (自動計算してくれるワープロソフトもあります).セルに定義した計算式は Filed オブジェクトの一種で,この Filed を更新する必要があります.


図1
元の表
図2
Button1 クリックで計算式をセット
図3
Button2 クリックで更新

リスト1
表のセルに計算式
//=============================================================================
//  セルに計算式を設定
//  何故かセルの指定はA1形式
//=============================================================================
procedure TplWordFormEx2.Button1Click(Sender: TObject);
var
  pTable     : Integer;
  objCell    : Word2000.Cell;
  pFormula   : OleVariant;
  pNumFormat : OleVariant;
begin
  pTable     := 1;
  pNumFormat := ' #####.00';
  try
    pFormula := '=SUM(B1:B3)';
    objCell  := wdfWordDoc.Tables.Item(pTable).Cell(4,2);
    objCell.Formula(pFormula,pNumFormat);

    pFormula := '=SUM(C1:C3)';
    objCell  := wdfWordDoc.Tables.Item(pTable).Cell(4,3);
    objCell.Formula(pFormula,pNumFormat);
  except
    raise;
  end;
end;

//=============================================================================
//  フィールドの更新
//  セルの値を変更して再計算
//=============================================================================
procedure TplWordFormEx2.Button2Click(Sender: TObject);
var
  pTable  : Integer;
  objCell : Word2000.Cell;
begin
  pTable := 1;
  try
    //テストのためにセル値を変更
    objCell := wdfWordDoc.Tables.Item(pTable).Cell(1,2);
    objCell.Range.Text := '500';
    objCell := wdfWordDoc.Tables.Item(pTable).Cell(2,3);
    objCell.Range.Text := '125';

    //フィールドの更新
    objCell := wdfWordDoc.Tables.Item(pTable).Cell(4,2);
    objCell.Range.Fields.Update;
    objCell := wdfWordDoc.Tables.Item(pTable).Cell(4,3);
    objCell.Range.Fields.Update;
  except
    raise;
  end;
end;




計算式設定ダイアログ


ダイアログで設定するのであれば,以下のコードで計算式設定のダイアログを表示できます.


図4
計算式設定のダイアログ

リスト2
計算式設定ダイアログを表示
//=============================================================================
//  計算式設定ダイアログ    
//=============================================================================
procedure TplWordFormEx2.Button3Click(Sender: TObject);
var
  pTimeOut : OleVariant;
begin
  pTimeOut := 0;
  try
    wdfWordApp.Dialogs.Item(wdDialogTableFormula).Show(pTimeOut);
  except
    raise;
  end;
end;