2008-09-28 5 views
16

Tengo tres preguntas relacionadas.Creación, apertura e impresión de un archivo de palabra de C++

Quiero crear un archivo de palabras con un nombre de C++. Deseo poder enviar el comando de impresión a este archivo, para que el archivo se imprima sin que el usuario tenga que abrir el documento y hacerlo manualmente, y quiero poder abrir el documento. Al abrir el documento solo debe abrir la palabra que luego abre el archivo.

Respuesta

0

No tengo experiencia en la integración con Microsoft Office, pero creo que hay algunas API que se pueden usar para esto.

Sin embargo, si lo que desea lograr es una forma rudimentaria de imprimir una salida formateada y exportarla a un archivo que pueda manejarse en Word, es posible que desee examinar el formato RTF. El formato es bastante simple de aprender y es compatible con RtfTextBox (¿o es RichTextBox?), Que también tiene algunas capacidades de impresión. El formato rtf es el mismo formato que usa Windows Wordpad (write.exe).

Esto también tiene la ventaja de no depender de MS Office para funcionar.

15

Puede usar Office Automation para esta tarea. Puede encontrar respuestas a las preguntas frecuentes sobre Office Automation con C++ en http://support.microsoft.com/kb/196776 y http://support.microsoft.com/kb/238972.

Tenga en cuenta que para realizar la automatización de Office con C++, debe comprender cómo usar COM.

Éstos son algunos ejemplos de cómo llevar a cabo diversas tareas en la palabra usign C++:

La mayor parte de estas muestras indican cómo hacerlo usando MFC, pero los conceptos de usar COM para manipular Word son los mismos, incluso si usa ATL o COM directamente.

+0

Esta es una excelente respuesta a la pregunta. Deseo señalar a otros que están relacionados con esta respuesta con otras preguntas, que esto no es apropiado para el uso del servidor o cuando no hay ningún usuario conectado. Esta no es la situación en esta pregunta, pero hay otras preguntas ese enlace aquí fue sobre el uso del lado del servidor y en esos casos Office Automation no es apropiado. Para imprimir en un escritorio, es perfectamente adecuado. –

2

Cuando se tiene el archivo y sólo quiere para imprimirlo, luego mira this entry en el blog de Raymond Chen. Puede usar el verbo "imprimir" para imprimir.

Vea el shellexecute msdn entry para más detalles.

4

Como publicado como respuesta a similar question, le aconsejo que consulte this page donde el autor explica qué solución tomó para generar documentos de Word en un servidor, sin MsWord disponible, sin automatización ni bibliotecas de terceros.

0

Mi solución para esto es utilizar el siguiente comando:

start /min winword <filename> /q /n /f /mFilePrint /mFileExit 

Esto permite al usuario especificar una impresora, no. de copias, etc.

Reemplace <filename> con el nombre de archivo. Debe estar entre comillas dobles si contiene espacios. (Por ejemplo file.rtf, "A File.docx")

Se puede colocar dentro de una llamada al sistema como en:

system("start /min winword <filename> /q /n /f /mFilePrint /mFileExit"); 

Aquí es un archivo de cabecera C++ con funciones que manejar esto por lo que no tiene que recordar todos los conmuta si lo usa con frecuencia:

/*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 
Cuestiones relacionadas