6

この問題に関する複数の投稿を読みましたが、私の質問に対して適切な結論に達しているようには見えません。(おそらく、最近何かがポップアップしたかどうかを確認しようとしています。)

誓約を処理する小さな慈善アプリを持っています。その際、ドキュメントを操作して印刷する必要があります。

Word がバックグラウンドで開いていると、アプリ スレッドがハングして Word の終了に応答しなくなり、手動でロールバックして Word を閉じる必要があります。確かに、すべて問題なく動作しますが、ユーザー マニュアルに説明を記載したとしても、エンド ユーザーが Word を閉じることを保証することはできません。

速度についてはあまり気にしていませんが、強化できればちょっとしたおまけになると思います。

ドキュメントを開いたり、編集したり、印刷したり、保存したりできる Delphi 用のライブラリはリリースされていますか? そうでない場合、開いたときに Word の別の開いているハンドルと競合しないように Word Automation を使用する方法はありますか?

4

3 に答える 3

5

を使用するGetActiveOleObjectと、Word の実行中のインスタンスが取得されます。を使用CreateOleObjectすると、新しいインスタンスが取得され、実行中の他のインスタンスに悩まされることはありません。

を使用する場合はTWordApplication、ラッパーを設定ConnectKindckNewInstanceてこれを実現できます。デフォルトでは、TWordApplication は実行中のインスタンスに接続しようとします。

于 2012-10-31T14:13:47.953 に答える
1
procedure PrintViaWord (const filename: string);
const
 wdUserTemplatesPath = 2;

var
  wrdApp, wrdDoc, wrdSel: variant;

begin
 wrdApp:= CreateOleObject ('Word.Application');   // create new instance
 sleep (5000);    // this fixes a bug in Word 2010 to do with opening templates
 wrdDoc:= wrdApp.documents.add (
          wrdApp.Options.DefaultFilePath[wdUserTemplatesPath] + '\mytemplate.dot');

 wrdDoc.Select;
 wrdSel:= wrdApp.selection;
 wrdApp.Options.CheckSpellingAsYouType:= 0;
 wrdSel.paragraphformat.alignment:= 1;
 wrdSel.typetext ('This is a program demonstrating how to open Word in the background'
                  + ' and add some text, print it, save it and exit Word');
 wrdDoc.SaveAs (filename + '.doc');
 wrdApp.ActivePrinter:= 'Konica Minolta 211';
 wrdApp.PrintOut;
 WrdDoc.SaveAs (filename + '.doc');
 wrdApp.quit;

 wrdSel:= unassigned;
 wrdDoc:= unassigned;
 wrdApp:= unassigned
end;
于 2012-11-01T15:52:45.987 に答える
1

Word 文書を開いて編集および印刷する必要があり、その作業に RTF 形式を使用してもかまわない場合は、TRichViewを調べてください。

MS Word がサポートする形式の 1 つである RTF 形式のリッチ ドキュメントを生成します。.DOC ファイルを直接読み取るとは思いませんが、ほとんどの単純なファイルの場合、.DOC と .DOCX を RTF に変換できますが、特定の高度な書式設定機能は変換で失われます。

ドキュメント処理を行うマシンに MS Word のコピーをインストールしなくても作業できるという利点があります。領収書やその他の簡単な書類の作成では、これが最も信頼できる手法です。Word を直接使用しないでください。

于 2012-11-01T12:59:15.533 に答える