Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2009年05月12日] [更新 2013年11月28日] ワード操作フォームEx
ワード操作フォームEx
テストプログラム TableTest
動作確認等 Windows 7 U64(SP1) + Delphi XE(UP1) Pro + Word 2010







表の行追加とセルへの文字列代入


表の行追加関係メソッドと,セルへの文字列挿入のテストプログラムです.


図1
メソッド呼出用ボタンを配置

リスト1
メインフォームのコード
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

uses TableTestUnit;


{$R *.DFM}

//=============================================================================
//  ワード操作フォームEx(の継承フォーム)をモーダル表示
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
  //起動時に表示する文書名
  plWordFormEx2.wdfFileFullPath := '表操作テスト文書.doc';
  plWordFormEx2.ShowModal;
end;

end.


リスト2
ワード操作フォームEx の (継承フォームの) コード
unit TableTestUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, plWordEx, StdCtrls, Buttons, ToolWin, ComCtrls, ExtCtrls;

type
  TplWordFormEx2 = class(TplWordFormEx)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure btnFileSaveClick(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  plWordFormEx2: TplWordFormEx2;

implementation

{$R *.dfm}

//=============================================================================
//  第2の表の最下行をコピーして行を追加
//  セル内の文字もコピー
//=============================================================================
procedure TplWordFormEx2.Button1Click(Sender: TObject);
begin
  //画面更新の停止
  LockWindowUpDate(PanelLeft.Handle);

  wdfAddRowCopy(1);

  //画面更新の再開
  LockWindowUpDate(0);

  //保存済みにしてしまう
  wdfWordDoc.Saved := True;
end;

//=============================================================================
//  第1の表に空白行追加
//  テスト文書なので終了後は変更なしにしている
//=============================================================================
procedure TplWordFormEx2.Button2Click(Sender: TObject);
begin
  //画面更新の停止
  LockWindowUpDate(PanelLeft.Handle);

  wdfAddRow(1);

  //画面更新の再開
  LockWindowUpDate(0);

  //保存済みにしてしまう
  wdfWordDoc.Saved := True;
end;

//=============================================================================
//  指定セルに文字列をセット
//  ここでは第1の表の,1行2列目
//  表の行と列の開始番号は1
//=============================================================================
procedure TplWordFormEx2.Button3Click(Sender: TObject);
begin
  //画面更新の停止
  LockWindowUpDate(PanelLeft.Handle);

  wdfPutCellText(1, 1, 2, '東京都');

  //画面更新の再開
  LockWindowUpDate(0);

  //保存済みにしてしまう
  wdfWordDoc.Saved := True;
end;

//=============================================================================
//  著者が使用している変則セルをもつ表の行追加メソッドの使用例
//  ここでは第2の表に追加
//  この表は実質3行でできているので,第2引数の値を3としている 
//=============================================================================
procedure TplWordFormEx2.Button4Click(Sender: TObject);
begin
  //画面更新の停止
  LockWindowUpDate(PanelLeft.Handle);

  wdfAddRowEx(2,3);

  //画面更新の再開
  LockWindowUpDate(0);

  //保存済みにしてしまう
  wdfWordDoc.Saved := True;
end;

//=============================================================================
//  表の番号
//  ここでは1行1列目のセルに表番号の数字をセット
//=============================================================================
procedure TplWordFormEx2.Button5Click(Sender: TObject);
var
  pTable : OleVariant;
  pRow   : OleVariant;
  pCol   : OleVariant;
  i      : Integer;
begin
  pRow := 1;;
  pCol := 1;

  //表の番号も行と列の数値も1から始まることに注意
  for i := 1 to wdfWordDoc.Tables.Count do begin
    pTable := i;
    wdfWordDoc.Tables.Item(pTable).Cell(pRow,pCol).Range.Text := IntToStr(i);
  end;
end;

//=============================================================================
//  戻す
//=============================================================================
procedure TplWordFormEx2.Button6Click(Sender: TObject);
begin
  wdfWordDoc.Undo;
end;

//=============================================================================
//  保存時は文書名自動生成
//=============================================================================
procedure TplWordFormEx2.btnFileSaveClick(Sender: TObject);
var
   S : String;
begin
  S := FormatDateTime('yyyy"年"mm"月"dd"日_"', Now);
  SaveDialog1.FileName := S + '表操作テスト文書';

  //継承元のボタンクリックを実行
  inherited;
end;

end.