我有三个相关的问题。
我想创建一个名称来自 C++ 的 word 文件。我希望能够将打印命令发送到该文件,以便在用户不必打开文档并手动执行的情况下打印该文件,并且我希望能够打开该文档。打开文档应该只打开 word 然后打开文件。
我有三个相关的问题。
我想创建一个名称来自 C++ 的 word 文件。我希望能够将打印命令发送到该文件,以便在用户不必打开文档并手动执行的情况下打印该文件,并且我希望能够打开该文档。打开文档应该只打开 word 然后打开文件。
您可以使用 Office 自动化来完成此任务。您可以在http://support.microsoft.com/kb/196776和http://support.microsoft.com/kb/238972找到有关使用 C++ 的 Office 自动化的常见问题的答案。
请记住,要使用 C++ 进行 Office 自动化,您需要了解如何使用 COM。
以下是一些如何在 word usign C++ 中执行各种任务的示例:
这些示例中的大多数显示了如何使用 MFC 来完成,但使用 COM 操作 Word 的概念是相同的,即使您直接使用 ATL 或 COM。
如果您拥有该文件并且只想打印它,请查看Raymond Chen 博客上的此条目。您可以使用动词“打印”进行打印。
有关详细信息,请参阅shellexecute msdn 条目。
您可以使用自动化打开 MS Word(在后台或前台),然后发送所需的命令。
一个好的起点是知识库文章Office Automation Using Visual C++
How To Use Visual C++ to Access DocumentProperties with Automation中提供了一些 C 源代码(标题是 C++,但它是纯 C)
我没有与 Microsoft Office 集成的经验,但我想你可以使用一些 API。
但是,如果您想要完成的是打印格式化输出并将其导出到可以在 Word 中处理的文件的基本方法,您可能需要查看 RTF 格式。该格式很容易学习,并且由 RtfTextBox(或者是 RichTextBox?)支持,它还具有一些打印功能。rtf 格式与 Windows 写字板 (write.exe) 使用的格式相同。
这还具有不依赖 MS Office 来工作的好处。
我对此的解决方案是使用以下命令:
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