WORD文書に他のファイルからの文字列を...


見当もつかない  2009-07-02 00:07:48  No: 34977

WORD文書に他のファイルからの文字列を追加(位置はいろいろです)したいと思っています。
Delphiの簡単なプログラムなら作れるのですが、
DelphiでWORDを操作する方法がまったくわかりません。
インターネットを検索して、Mr.XRAYさんのHPも見たのですが、わからずじまいです。
どなたか、とりあえず、Form上のボタンを押したらWORD文書を開くプログラムを教えていただけないでしょうか?
それと、WORDApplicationとWORDDocumentはどう違うのでしょうか?
Turbo Delphi2006を使っています。


さんか  2009-07-02 06:24:24  No: 34978

最終的になにがしたいのかわかりませんが、
そのMr.XRAYさんのワード操作フォームExを使うのが手っ取り早いと思います。

一番簡単にやるならWordの文章だけをTXTファイルで別保存して、
それをTMemoあたりで読み込むのがラクかと思います。


見当もつかない  2009-07-03 02:56:20  No: 34979

Mr.XRAYさんのHPにあったワード操作フォームをコンパイルしようとしたのですが、
「FastMM4.dcuが見つかりません」というエラーが出ました。
このファイルはどこから入手したらいいんでしょうか?


DEKO  2009-07-03 03:11:01  No: 34980

http://sourceforge.net/projects/fastmm/files/
こちらになります。

なお、Mr.XRAYさんのサイトにも記述がありますが、
Turbo(2006) のメモリマネージャは FastMM 相当です。
http://mrxray.on.coocan.jp/Others/UsageFastMM.htm

新しい(そして完全版の)FastMM を使う必要がないのであれば、
uses から FastMM を外してコンパイルする事が出来ます。


なかや  2009-07-03 03:37:58  No: 34981

WordApplication1.Connect;
WordApplication1.Documents.Add(Template, NewTemplate, _WordDocumentType,_Visible);

//WordDocumentオブジェクトの接続処理
WordDocument1.ConnectTo (WordApplication1.ActiveDocument as _document);
//WordFontオブジェクトの接続処理
WordFont1.ConnectTo(WordApplication1.Selection.Font);

WordApplication1.Selection.TypeText('こんにちは');

こんな風に記載していけばOkです。
一番簡単なのは、Word上でマクロ(VBA)を操作して、VBAで作られたコードをDelphiに置き換えて
いけばいいのですが、若干Wordのバージョンによっても命令が異なったり、中々奥が深いです。

以上


見当もつかない  2009-07-03 06:02:12  No: 34982

DEKOさんありがとうございます。
>uses から FastMM を外してコンパイルする事が出来ます。

とりあえず、なかやさんの方法でやってみます。
でも、
WordApplication1.Documents.Add(Template, NewTemplate, _WordDocumentType,_Visible);
の、NewTemplate, _WordDocumentType,_Visibleでエラーが出る(赤い波線が出る)のですが、usesに何か追加する必要があるのでしょうか?


Mr.XRAY  2009-07-03 18:15:16  No: 34983

Mr.XRAYです.

>(Template, NewTemplate, _WordDocumentType,_Visible);

これらは引数の変数名です.
このままで「未定義の識別子」のエラーとなります.

例えば以下のコードもA,Bで同じエラーとなります.

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 宣言 }
    function HogeHoge(A,B : Integer): Integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
    C : Integer;
begin
    C := HogeHoge(A,B);
end;

function TForm1.HogeHoge(A, B: Integer): Integer;
begin
   Result := A + B;
end;

end.

引数の変数には,この場合,必ず値を代入しておく必要があります.
Delphiでは,必ず変数の型を定義しなければ,その変数は使用できません.
型の定義をプログラムのどこで行うかは,その変数を,そのプログラム内で
どうのように利用するかによって,プログラムする方が決めます.

上のコードの場合,例えば,Button1クリック内でしか使用しないのであれば,
以下の様にも書けます.

procedure TForm1.Button1Click(Sender: TObject);
var
    C : Integer;
    A,B : Integer;
begin
    A := 100;
    B := 30;
    C := HogeHoge(A,B);
end;

>(Template, NewTemplate, _WordDocumentType,_Visible);

これらの引数の型については,
[Servers]タブのコンポーネントの場合,Delphiのヘルプには説明がありませんが,
VBAのヘルプか以下の方法で知ることができます.
あるいは,ソースコード(Turbo 2006って,ソースコードがないのかな?)で確認できます.
変数の意味は,変数の名前から推測するか,ワードのVBAで調べることになります.

コード補完機能
http://mrxray.on.coocan.jp/Others/A_IDETechnique.htm#05
関数の宣言表示
http://mrxray.on.coocan.jp/Others/A_IDETechnique.htm#06


Mr.XRAY  2009-07-03 18:20:03  No: 34984

>上のコードの場合,例えば,Button1クリック内でしか使用しないのであれば,
>以下の様にも書けます.

引数の変数名は,定義してある引数名と同じである必要はありません.
先程の場合,例えば,以下でも結果は同じです.

procedure TForm1.Button1Click(Sender: TObject);
var
    C : Integer;
    D,E : Integer;
begin
    D := 100;
    E := 30;
    C := HogeHoge(D,E);
end;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加