2008-09-28 2 views
16

У меня есть три связанных вопроса.Создание, открытие и печать файла слов из C++

Я хочу создать файл слова с именем из C++. Я хочу, чтобы иметь возможность отправить команду печати в этот файл, чтобы файл печатался без того, чтобы пользователь открывал документ и выполнял его вручную, и я хочу иметь возможность открыть документ. При открытии документа следует просто открыть слово, которое затем откроет файл.

ответ

0

У меня нет опыта интеграции с Microsoft Office, но, я думаю, есть некоторые API, которые вы можете использовать для этого.

Однако, если то, что вы хотите выполнить, является рудиментарным способом печати отформатированного вывода и экспорта его в файл, который можно обрабатывать в Word, вы можете посмотреть в формате RTF. Формат довольно прост в освоении и поддерживается RtfTextBox (или RichTextBox?), Который также имеет некоторые возможности печати. Формат rtf - это тот же формат, который используется в Windows Wordpad (write.exe).

Это также имеет преимущество независимо от MS Office для работы.

15

Для этой задачи вы можете использовать автоматизацию Office. Вы можете найти ответы на часто задаваемые вопросы о Office Automation с C++ по адресу http://support.microsoft.com/kb/196776 и http://support.microsoft.com/kb/238972.

Имейте в виду, что для автоматизации Office с помощью C++ вам необходимо понять, как использовать COM.

Вот некоторые примеры того, как выполнять различные задачи в слово usign C++:

Большинство из этих образцов показывают, как сделать это с помощью MFC, но концепции использования COM для управления Word одинаковы, даже если вы используете ATL или COM напрямую.

+0

Это отличный ответ на заданный вопрос. Я хочу указать на других, которые связаны с этим ответом из других вопросов, что это не подходит для использования на стороне сервера или когда пользователь не зарегистрирован. Это не та ситуация в этом вопросе, но есть и другие вопросы которые ссылаются здесь на использование на стороне сервера, и в таких случаях Office Automation не подходит. Для печати на рабочем столе он идеально подходит. – 2011-04-28 16:49:47

1

Вы можете использовать автоматизацию, чтобы открыть MS Word (в фоновом режиме или переднем плане), а затем отправить необходимые команды.

Хорошие отправная точка является статьей базы знаний Office Automation Using Visual C++

Некоторых источника C код доступны в How To Use Visual C++ to Access DocumentProperties with Automation (название говорит C++, но это обычный C)

2

Если у вас есть файл, и вы хотите распечатать его, а затем посмотреть на this entry в блоге Raymond Chen. Вы можете использовать глагол «print» для печати.

Подробнее см. В shellexecute msdn entry.

4

Как указано в ответе на вопрос similar question, я советую вам взглянуть на this page, где автор объясняет, какое решение он принял для создания документов Word на сервере, без возможности доступа к MsWord, без библиотек автоматизации или третьих сторон.

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