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 クリックで更新 |
//=============================================================================
// セルに計算式を設定
// 何故かセルの指定は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
計算式設定のダイアログ |
//=============================================================================
// 計算式設定ダイアログ
//=============================================================================
procedure TplWordFormEx2.Button3Click(Sender: TObject);
var
pTimeOut : OleVariant;
begin
pTimeOut := 0;
try
wdfWordApp.Dialogs.Item(wdDialogTableFormula).Show(pTimeOut);
except
raise;
end;
end;
|