16

我有三个相关的问题。

我想创建一个名称来自 C++ 的 word 文件。我希望能够将打印命令发送到该文件,以便在用户不必打开文档并手动执行的情况下打印该文件,并且我希望能够打开该文档。打开文档应该只打开 word 然后打开文件。

4

6 回答 6

15

您可以使用 Office 自动化来完成此任务。您可以在http://support.microsoft.com/kb/196776http://support.microsoft.com/kb/238972找到有关使用 C++ 的 Office 自动化的常见问题的答案。

请记住,要使用 C++ 进行 Office 自动化,您需要了解如何使用 COM。

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

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

于 2008-09-28T10:01:39.067 回答
4

作为对类似问题的回答,我建议您查看此页面,其中作者解释了他在服务器上生成 Word 文档所采用的解决方案,没有 MsWord 可用,没有自动化或第三方库。

于 2011-04-28T07:08:26.617 回答
2

如果您拥有该文件并且只想打印它,请查看Raymond Chen 博客上的此条目。您可以使用动词“打印”进行打印。

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

于 2008-09-28T10:16:13.930 回答
1

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

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

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

于 2008-09-28T10:02:19.703 回答
0

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

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

这还具有不依赖 MS Office 来工作的好处。

于 2008-09-28T09:58:11.727 回答
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
于 2011-11-30T21:11:45.653 回答