Créer, ouvrir et imprimer un fichier Word à partir de C ++

J’ai trois questions connexes.

Je veux créer un fichier Word avec un nom de C ++. Je veux pouvoir envoyer la commande d’impression à ce fichier, de sorte que le fichier soit imprimé sans que l’utilisateur n’ait à ouvrir le document et à le faire manuellement et que je souhaite pouvoir ouvrir le document. L’ouverture du document doit simplement ouvrir le mot qui ouvre alors le fichier.

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 ++ à l’ adresse http://support.microsoft.com/kb/196776 et http://support.microsoft.com/kb/238972 .

Gardez à l’esprit que pour faire Office Automation avec C ++, vous devez comprendre comment utiliser COM.

Voici quelques exemples sur la façon d’effectuer diverses tâches dans un mot avec C ++:

La plupart de ces exemples 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 directement ATL ou COM.

En réponse à une question similaire , je vous conseille de regarder cette page où l’auteur explique quelle solution il a prise pour générer des documents Word sur un serveur, sans MsWord disponible, sans automatisation ou bibliothèques tierces.

Lorsque vous avez le fichier et que vous souhaitez l’imprimer, regardez cette entrée sur le blog de Raymond Chen. Vous pouvez utiliser le verbe “print” pour l’impression.

Voir l’ entrée de msdn shellexecute pour plus de détails.

Vous pouvez utiliser l’automatisation pour ouvrir MS Word (en arrière-plan ou au premier plan), puis envoyer les commandes nécessaires.

L’article de base de connaissances Office Automation utilisant Visual C ++ est un bon sharepoint départ.

Certains codes source C sont disponibles dans Comment utiliser Visual C ++ pour accéder à DocumentProperties avec Automation (le titre dit C ++, mais il est clair C)

Je n’ai aucune expérience de l’intégration avec Microsoft Office, mais je suppose qu’il existe certaines API que vous pouvez utiliser pour cela.

Toutefois, si vous souhaitez réaliser une méthode rudimentaire d’impression d’une sortie formatée et de l’exporter dans un fichier pouvant être géré dans Word, vous pouvez examiner le format RTF. Le format est assez simple à apprendre et est supporté par RtfTextBox (ou est-ce RichTextBox?), Qui a également des capacités d’impression. Le format rtf est le même que celui utilisé par Windows Wordpad (write.exe).

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

Ma solution consiste à utiliser la commande suivante:

start /min winword  /q /n /f /mFilePrint /mFileExit 

Cela permet à l’utilisateur de spécifier une imprimante, non. de copies, etc.

Remplacez par le nom du fichier. Il doit être placé entre guillemets 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  /q /n /f /mFilePrint /mFileExit"); 

Voici un fichier d’en-tête C ++ avec des fonctions qui gèrent cela. Vous n’avez donc pas à vous souvenir de tous les commutateurs si vous l’utilisez fréquemment:

 /*winword.h *Includes functions to print Word files more easily */ #ifndef WINWORD_H_ #define WINWORD_H_ #include  #include  //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