関連する質問が 3 つあります。
C++ の名前でワード ファイルを作成したいと考えています。このファイルに印刷コマンドを送信できるようにしたいので、ユーザーがドキュメントを開いて手動で実行しなくてもファイルが印刷され、ドキュメントを開くことができるようにしたいと考えています。ドキュメントを開くと、単語が開き、ファイルが開きます。
関連する質問が 3 つあります。
C++ の名前でワード ファイルを作成したいと考えています。このファイルに印刷コマンドを送信できるようにしたいので、ユーザーがドキュメントを開いて手動で実行しなくてもファイルが印刷され、ドキュメントを開くことができるようにしたいと考えています。ドキュメントを開くと、単語が開き、ファイルが開きます。
このタスクにはOfficeオートメーションを使用できます。C++を使用したOfficeAutomationに関するよくある質問への回答は、http ://support.microsoft.com/kb/196776およびhttp://support.microsoft.com/kb/238972にあります。
C++でOfficeAutomationを実行するには、COMの使用方法を理解する必要があることに注意してください。
C++を使用してWordでさまざまなタスクを実行する方法の例を次に示します。
これらのサンプルのほとんどは、MFCを使用してそれを行う方法を示していますが、COMを使用してWordを操作する概念は、ATLまたはCOMを直接使用する場合でも同じです。
ファイルがあり、それを印刷したい場合は、RaymondChenのブログでこのエントリを参照してください。印刷には動詞「print」を使用できます。
詳細については、shellexecutemsdnエントリを参照してください。
自動化を使用して(バックグラウンドまたはフォアグラウンドで)MS Wordを開き、必要なコマンドを送信できます。
出発点として適しているのは、ナレッジベースの記事「VisualC++を使用したオフィスオートメーション」です。
一部のCソースコードは、「Visual C ++を使用して自動化でDocumentPropertiesにアクセスする方法」で入手できます(タイトルにはC ++と記載されていますが、プレーンCです)。
Microsoft Officeとの統合の経験はありませんが、これに使用できるAPIがいくつかあると思います。
ただし、フォーマットされた出力を印刷し、Wordで処理できるファイルにエクスポートする基本的な方法である場合は、RTFフォーマットを調べることをお勧めします。この形式は習得が非常に簡単で、RtfTextBox(またはRichTextBoxですか?)でサポートされています。RtfTextBoxにはいくつかの印刷機能もあります。rtf形式は、Windowsワードパッド(write.exe)で使用される形式と同じです。
これには、動作するためにMSOfficeに依存しないという利点もあります。
これに対する私の解決策は、次のコマンドを使用することです。
start /min winword <filename> /q /n /f /mFilePrint /mFileExit
これにより、ユーザーはプリンターを指定できます。コピーなど
<filename>
ファイル名に置き換えます。スペースが含まれる場合は、二重引用符で囲む必要があります。(例file.rtf
: "A File.docx"
)
次のようにシステムコール内に配置できます。
system("start /min winword <filename> /q /n /f /mFilePrint /mFileExit");
これを処理する関数を含む C++ ヘッダー ファイルを次に示します。頻繁に使用する場合は、すべてのスイッチを覚えておく必要はありません。
/*winword.h
*Includes functions to print Word files more easily
*/
#ifndef WINWORD_H_
#define WINWORD_H_
#include <string.h>
#include <stdlib.h>
//Opens Word minimized, shows the user a dialog box to allow them to
//select the printer, number of copies, etc., and then closes Word
void wordprint(char* filename){
char* command = new char[64 + strlen(filename)];
strcpy(command, "start /min winword \"");
strcat(command, filename);
strcat(command, "\" /q /n /f /mFilePrint /mFileExit");
system(command);
delete command;
}
//Opens the document in Word
void wordopen(char* filename){
char* command = new char[64 + strlen(filename)];
strcpy(command, "start /max winword \"");
strcat(command, filename);
strcat(command, "\" /q /n");
system(command);
delete command;
}
//Opens a copy of the document in Word so the user can save a copy
//without seeing or modifying the original
void wordduplicate(char* filename){
char* command = new char[64 + strlen(filename)];
strcpy(command, "start /max winword \"");
strcat(command, filename);
strcat(command, "\" /q /n /f");
system(command);
delete command;
}
#endif