はじめまして。 Delphi 2007で、Word 2000で作成した.docファイルを.txtファイルへ変換したいと考えています。


Pon  2012-05-29 13:13:34  No: 42368  IP: 192.*.*.*

プログラム初心者です。
仕事でWordで作ったものをテキストファイルへ変換してほしいと依頼がありました。
自分の勉強になると思いdelphiで組んでみようと思ったのですが、何から手をつけていいのかわかりません。
もし、お時間のある方がいればご指導をお願いします。

編集 削除
Nov  2012-05-29 13:59:34  No: 42369  IP: 192.*.*.*

質問の回答になってませんけど、Word単体で、テキストファイルに保存するマクロを作った方が効率的じゃないですか?

編集 削除
Pon  2012-05-29 14:57:25  No: 42370  IP: 192.*.*.*

Novさん早速の回答ありがとうございます。
自分の勉強という名目なので、効率的な方法があるならそちらでもかまいません。方法がたくさんあるのであれば、自分の選択肢も増えて助かります。

どこか参考になるサイトなどあれば教えていただいてもいいですか?

編集 削除
Nov  2012-05-29 16:58:17  No: 42371  IP: 192.*.*.*

MS-WORDのマクロはVBAなのでここでの問答はちょっと...
ただ、マクロの記録で'テキストに保存'を試せば、方法は分かると思います。

編集 削除
Mr.XRAY  2012-05-29 17:05:21  No: 42372  IP: 192.*.*.*

こんにちは,Mr.XRAYです.

.docファイルからテキスト部分を取出すには,
いくつか方法があると思いますが.

(1) .docのファイルのフォーマットから,自力でコーディングする
    フォーマットは,例えば以下のサイト等から調べる
    http://www.wotsit.org/
    
(2) ワードのオブジェクトを生成し,ワードの文書を読み込み,テキスト形式で保存する

(3) テキストを抽出するプログラムを,Delphiから制御して取出す
    例えば以下のようなものを使用
    [434_ワードやエクセルの文書内のテキストを取出す]
    http://mrxray.on.coocan.jp/Delphi/plSamples/434_TextFromDocs.htm
    
今思いついたところではこんなところです.  

余計なお世話ですが,タイトルがちょっと長すぎるのでは...
タイトルが本文になっているような.
このあたりかな,以下は参考です.
タイトルの注意まで書いているところは少ないですね.
メールでも掲示板でも,Q and Aに関しては同じです.

http://www.hyuki.com/writing/mailmake.html#subject

編集 削除
Pon  2012-05-29 17:24:47  No: 42373  IP: 192.*.*.*

Novさん
流れで質問をしてしまいましたが、おっしゃるとおりです。私の質問はこの場に合っていませんでしたね。
また、自力で調べて不明な点は他の場で聞いて見ます。
返答して頂きありがとうございました。

編集 削除
Pon  2012-05-29 17:34:52  No: 42374  IP: 192.*.*.*

Mr.XRAY
すみません。まず、質問をする前の常識から勉強不足でした。

URLを載せていただきありがとうございます。教えていただいたサイトから勉強させていただきます。また、判らない点が出てきたらお聞きすると思いますが、よろしくお願いします。

編集 削除
Mr.XRAY  2012-05-29 18:39:43  No: 42375  IP: 192.*.*.*

自分の勉強ということですので,こんなことも知っておくと便利です.
以下は,VBS (VBSctrip) のコードを実行する例です.
VBS は結構使われています.サンプルもネット上で多く見つかります.

以下のコードを 'ChangeDocToText.vbs' という名前で保存します.
ワードの文書は,'ワード文書.doc' とします.
どちらも,プロジェクトのフォルダにあるものとします.
このVBSのコードも以前,ネットで見つけたものです.

Set FSO = CreateObject("Scripting.FileSystemObject")
Set WD = CreateObject("Word.Application")

For Each n in WScript.Arguments

 t = LCase(FSO.GetExtensionName(n))

  If (t = "doc") Or (t = "rtf") Then
   Set d = WD.Documents.Open(n)
   d.SaveAs _
    d.Path & "\" & _
    Replace(FSO.GetFileName(n), "." & t,".txt"), 2
   d.Close
  End If

Next

WD.Quit
Set WD = Nothing
Set FSO = Nothing

そして,次のプログラムを実行します.
プロジェクトのフォルダに 'ワード文書.txt' という名前のテキストファイルができます.

implementation

uses ShellAPI;

{$R *.dfm}

//=============================================================================
//  .docファイルのテキストを取出すVBSのコードを実行
//  usesにShellAPIが必要
//=============================================================================
procedure TForm1.Button2Click(Sender: TObject);
var
  VBSPath     : String;
  DocFileName : String;
begin
  VBSPath     := ExtractFilePath(Application.ExeName) + 'ChangeDocToText.vbs';
  DocFileName := ExtractFilePath(Application.ExeName) + 'ワード文書.doc';

  ShellExecute(Handle,'open',PChar(VBSPath), PChar(DocFileName), nil, SW_HIDE);
end;

編集 削除
Mr.XRAY  2012-05-29 18:43:18  No: 42376  IP: 192.*.*.*

スミマセン,毎度なんですが,間違えました.

VBSctrip ---> VBScript

こんなとこも参考になれば.
[950_Delphi で VBScript を操作] 
http://mrxray.on.coocan.jp/Delphi/plSamples/950_VBScript.htm

編集 削除
takana  2012-05-29 22:31:54  No: 42377  IP: 192.*.*.*

Mr.XRAYさんの
>(2) ワードのオブジェクトを生成し,ワードの文書を読み込み,テキスト形式で保存する
をすべてDelphiでコーディングした例です。

uses に ComObj を追加してください。

const
  //適当なファイル名に変更してください
  SourceName = 'z:\Test.doc';
  DestName   = 'z:\Test.txt';

//***********************************************************
// SourceNameのWordドキュメントファイルを
// DestNameのテキストファイルに保存する
//***********************************************************
procedure ChangeDocToText(SourceName, DestName: string);
const
  wdFormatText = 2;
var
  WordApp, WordDoc : OleVariant;
begin
  WordApp := CreateOleObject('Word.Application');
  WordDoc := WordApp.Documents.Open(SourceName);
  WordDoc.SaveAs(DestName, wdFormatText);
  WordDoc.Close;
  WordApp.Quit;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ChangeDocToText(SourceName, DestName);
end;

編集 削除
Pon  2012-05-30 08:54:30  No: 42378  IP: 192.*.*.*

Mr.XRAY
お忙しい中ここまで丁寧にありがとうございます。
思い切って書き込みをして良かったです。

編集 削除
Pon  2012-05-30 09:00:30  No: 42379  IP: 192.*.*.*

takanaさん
ご協力ありがとうございます。
まだ、始めたばかりのため時間はかかると思いますが、コーディングをしっかり理解して使わせていただきます。

編集 削除