从C ++创建,打开和打印word文件

时间:2008-09-28 09:44:06

标签: c++ windows automation ms-word

我有三个相关的问题。

我想创建一个名为C ++的word文件。我希望能够将打印命令发送到此文件,以便打印文件而无需用户打开文档并手动执行,我希望能够打开文档。打开文档应该只打开word然后打开文件。

6 个答案:

答案 0 :(得分:15)

您可以使用Office Automation执行此任务。您可以在http://support.microsoft.com/kb/196776http://support.microsoft.com/kb/238972找到有关使用C ++进行Office Automation的常见问题解答。

请记住,要使用C ++执行Office Automation,您需要了解如何使用COM。

以下是如何在单词usign C ++中执行各种任务的一些示例:

这些示例中的大多数都显示了如何使用MFC进行操作,但使用COM操作Word的概念是相同的,即使您直接使用ATL或COM也是如此。

答案 1 :(得分:4)

作为对similar question的回答,我建议您查看this page作者解释他在服务器上生成Word文档的解决方案,没有MsWord可用,没有自动化或第三方图书馆。

答案 2 :(得分:2)

当您拥有该文件并且只想打印时,请查看Raymond Chen博客上的this entry。您可以使用动词“print”进行打印。

有关详细信息,请参阅shellexecute msdn entry

答案 3 :(得分:1)

您可以使用自动化打开MS Word(在后台或前台),然后发送所需的命令。

一个好的起点是知识库文章Office Automation Using Visual C++

How To Use Visual C++ to Access DocumentProperties with Automation中提供了一些C源代码(标题为C ++,但它是普通的C)

答案 4 :(得分:0)

我没有与Microsoft Office集成的经验,但我想有一些可用于此的API。

但是,如果您想要完成的是打印格式化输出并将其导出到可以在Word中处理的文件的基本方法,您可能需要查看RTF格式。格式非常简单易学,并且受RtfTextBox(或RichTextBox?)的支持,它也具有一些打印功能。 rtf格式与Windows Wordpad(write.exe)使用的格式相同。

这样做的好处是不依赖于MS Office才能工作。

答案 5 :(得分:0)

我的解决方法是使用以下命令:

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