2008-09-28 5 views
16

J'ai trois questions connexes. Je souhaite créer un fichier Word avec un nom en C++. Je veux être en mesure d'envoyer la commande d'impression à ce fichier, afin que le fichier soit imprimé sans que l'utilisateur doive ouvrir le document et le faire manuellement et je veux être en mesure d'ouvrir le document. Ouverture du document devrait juste ouvrir le mot qui ouvre ensuite le fichier.Création, ouverture et impression d'un fichier Word à partir de C++

Répondre

0

Je n'ai aucune expérience de l'intégration avec Microsoft Office, mais je suppose qu'il existe des API que vous pouvez utiliser pour cela. Cependant, si ce que vous voulez accomplir est un moyen rudimentaire d'imprimer une sortie formatée et de l'exporter dans un fichier qui peut être manipulé dans Word, vous pourriez vouloir regarder dans le format RTF. Le format est assez simple à apprendre, et est supporté par le RtfTextBox (ou est-ce RichTextBox?), Qui a aussi quelques capacités d'impression. Le format rtf est le même format que celui utilisé par Windows Wordpad (write.exe).

Cela a également l'avantage de ne pas dépendre de MS Office pour fonctionner.

15

Vous pouvez utiliser Office Automation pour cette tâche. Vous pouvez trouver des réponses aux questions fréquemment posées sur Office Automation avec C++ au http://support.microsoft.com/kb/196776 et http://support.microsoft.com/kb/238972. Gardez à l'esprit que pour Office Automation avec C++, vous devez comprendre comment utiliser COM.

Voici quelques exemples de la façon d'effectuer diverses tâches dans le mot usign C++:

La plupart de ces échantillons montrent comment le faire en utilisant MFC, mais les concepts d'utilisation de COM pour manipuler Word sont les mêmes, même si vous utilisez ATL ou COM directement.

+0

Ceci est une excellente réponse à la question posée. Je tiens à signaler que d'autres personnes sont liées à cette réponse par d'autres questions, que ce n'est pas approprié pour une utilisation côté serveur ou lorsqu'il n'y a pas d'utilisateur connecté. Ce n'est pas le cas dans cette question, mais il y a d'autres questions ce lien ici qui étaient sur l'utilisation côté serveur et dans ces cas Office Automation n'est pas approprié. Pour l'impression sur un bureau, il est parfaitement adapté. –

2

Lorsque vous avez le fichier et que vous voulez juste pour l'imprimer, alors regardez this entry sur le blog de Raymond Chen. Vous pouvez utiliser le verbe "imprimer" pour imprimer.

Voir le shellexecute msdn entry pour plus de détails.

4

En tant que réponse à similar question, je vous conseille de regarder this page où l'auteur explique quelle solution il a pris pour générer des documents Word sur un serveur, sans MsWord étant disponible, sans automatisation ou bibliothèques tierces.

0

Ma solution est d'utiliser la commande suivante:

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

Ceci permet à l'utilisateur de spécifier une imprimante, non. de copies, etc.

Remplacez <filename> par le nom de fichier. Il doit être entouré de guillemets doubles s'il contient des espaces. (Par exemple file.rtf, "A File.docx")

Il peut être placé dans un appel système comme dans:

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

Voici un fichier d'en-tête de C++ avec des fonctions qui gèrent cette sorte que vous ne pas se souvenir de tous les bascule si vous l'utilisez fréquemment:

/*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 
Questions connexes