Comment un document Word créé en C#?
J'ai un projet où je voudrais générer un rapport d'exportation en format MS Word. Le rapport comprendra des images/des graphiques, des tableaux et du texte. Quelle est la meilleure façon de le faire? D'outils tiers? Quelles sont vos expériences?
- Cela devrait être ré-ouvert. Non seulement est-il clair et utile, mais est liée à d'autres questions qui sont marqués comme duplicata de celui-ci.
Vous devez vous connecter pour publier un commentaire.
La réponse va dépendre légèrement si l'application est en cours d'exécution sur un serveur ou si elle est en cours d'exécution sur l'ordinateur client. Si vous êtes en cours d'exécution sur un serveur, alors vous allez vouloir utiliser l'un de la base de XML office de génération de formats comme il y a des problèmes connus lors de l' à l'aide de la bureautique sur un serveur.
Toutefois, si vous travaillez sur la machine client, alors vous avez le choix soit de à l'aide de la bureautique ou en utilisant le format Office Open XML (voir les liens ci-dessous), qui est pris en charge par Microsoft Office 2000 et jusqu'soit nativement ou via les service packs. Un tirage de retour à ce bien, c'est que vous pourriez ne pas être en mesure d'intégrer certains types de graphiques ou d'images que vous souhaitez afficher.
La meilleure façon d'aborder les choses, il faut sightly sur la façon dont beaucoup de temps que vous avez à investir dans le développement. Si vous allez l'itinéraire de la bureautique il y a assez peu de bons tutoriels là-bas qui peut être trouvé par Google et est assez simple à apprendre. Cependant, le Open Office XML format est assez nouveau, de sorte que vous pourriez trouver la courbe d'apprentissage pour être un peu plus élevé.
Office Open XML Information
DocX gratuit bibliothèque pour la création de documents DocX, activement développé et très facile à utiliser et intuitif. Depuis CodePlex est en train de mourir, le projet a déménagé à github.
J'ai passé la dernière semaine ou se lever à la vitesse sur Office Open XML. Nous avons une application de base de données qui stocke les données de l'enquête que nous voulons rapport dans Microsoft Word. Vous pouvez en fait créer de Word 2007 (docx) des fichiers à partir de zéro en C#. Le SDK Open XML version 2 comprend une application cool appelé le Document Réflecteur qui va fournir le code C# pour recréer entièrement un document Word. Vous pouvez utiliser une partie ou la totalité du code, et les remplacer par les morceaux que vous souhaitez modifier à la volée. Le fichier d'aide inclus avec le kit de développement a quelques bons exemples de code ainsi.
Il n'est pas nécessaire pour le Bureau d'Interopérabilité ou tout autres logiciels de Bureau sur le serveur - les nouveaux formats sont 100% XML.
Avez-vous songé à utiliser .RTF comme une alternative?
Il prend en charge l'incorporation des images et des tableaux ainsi que les textes, s'ouvre par défaut à l'aide de Microsoft Word et tandis qu'il est featureset est plus limitée (comptez tout de formatage avancées) pour quelque chose qui ressemble et se sent et s'ouvre comme un document Word, il n'est pas loin.
Vos utilisateurs finaux ne remarquerez probablement pas.
J'ai trouvé Aspose Mots pour être le meilleur que pas tout le monde peut ouvrir Office Open XML/*.format docx fichiers et la Parole de l'interopérabilité et de l'automatisation de Word buggy. Aspose Mots prend en charge la plupart des types de fichiers de document à partir de Word 97 vers le haut.
Il est payant pour le composant, mais a un grand soutien. L'autre alternative comme l'a déjà suggéré est RTF.
Pour générer des documents Word avec l'Automatisation de Bureau à l'intérieur .NET, spécialement en C# ou VB.NET:
Ajouter le Microsoft.Bureau de.Interop.Mot assemblée référence à votre projet. Le chemin est \Visual Studio Tools pour Office\PIA\Office11\Microsoft.Office.Interop.Word.dll.
Suivre l'exemple de code Microsoft
vous pouvez trouver ici: http://support.microsoft.com/kb/316384/en-us.
Schmidty, si vous voulez générer des documents Word sur un serveur web, vous aurez besoin d'un permis pour chaque client (et pas seulement le serveur web). Voir cet article dans la première lien Rob posté le:
"En outre les problèmes techniques, il faut aussi considérer les questions de licences. Licence actuelle des lignes directrices empêcher les applications d'Office d'être utilisé sur un serveur pour traiter les demandes des clients, à moins que ces clients ont eux-mêmes des copies sous licence de microsoft Office. L'Automatisation côté serveur pour fournir des fonctionnalités d'Office unlicensed les postes de travail ne sont pas couverts par le Contrat de Licence Utilisateur Final (CLUF)."
Si vous répondez aux exigences d'octroi de licences, je pense que vous aurez besoin d'utiliser COM Interop - pour être précis, le Office XP Primary Interop Assemblies.
Découvrez VSTO (Visual Studio Tools for Office). Il est assez simple de créer un modèle Word, injecter un îlot de données xml en elle, puis de l'envoyer au client. Lorsque l'utilisateur ouvre le doc dans Word, Word lit le xml et le transforme en WordML et le restitue. Vous aurez envie de regarder la classe serverdocument de VSTO de la bibliothèque. Aucune licence supplémentaire n'est requis à partir de mon expérience.
J'ai eu un bon succès à l'aide de la Syncfusion Backoffice DocIO qui prend en charge doc et docx, formats.
Dans les versions antérieures, il n'a pas en charge tout dans la parole, mais accoriding à votre liste nous l'avons testé avec des tableaux et du texte comme un publipostage approche et il a bien fonctionné.
Pas sûr au sujet de l'importation des images. Sur leur texte de présentation de la page http://www.syncfusion.com/products/DocIO/Backoffice/features/default.aspx il dit
Si sa vaut la peine d'examiner.
Comme d'autres l'ont mentionné, vous pouvez vous constituer un document RTF, il ya quelques bonnes RTF bibliothèques autour de .net comme http://www.codeproject.com/KB/string/nrtftree.aspx
J'ai été confronté à ce problème et a créé une petite bibliothèque pour cela. Il a été utilisé dans plusieurs projets et puis, j'ai décidé de le publier. Il est gratuit et très très simple, mais je suis sûr que ça va aider à vous avec la tâche. Invoquer l'Office Open XML de la Bibliothèque, http://invoke.co.nz/products/docx.aspx.
J'ai écrit un blog de la série sur Open XML WordprocessingML de génération de documents. Mon approche est que vous créez un modèle de document qui contient des contrôles de contenu, et dans chacun de contrôle du contenu que vous écrivez une expression XPath qui définit comment récupérer le contenu d'un document XML qui contient les données que les lecteurs de la génération de document de processus. Le code est gratuit, et est sous la Microsoft Réciproque License (Ms-RL). Dans ce même blog de la série, j'ai aussi explorer une approche où vous écrivez le code C# dans les contrôles de contenu. Le processus de génération de document traite ensuite le modèle de document et génère un programme C# qui génère le document désiré. Un avantage de cette approche est que vous pouvez utiliser tout source de données comme source de données pour la génération de document de processus. Ce code est également sous licence de Microsoft Licence Réciproque.
Je fais cette chose exacte.
Si le document n'est pas très grand, ne contiennent pas d'images et de ces, puis-je l'enregistrer comme un fichier au format RTF avec #MergeFields# dans et il suffit de le remplacer par le contenu, l'envoi du résultat à l'utilisateur comme un RTF.
Pour les gros documents, y compris les images et dynamiquement les images insérées, je sauvegarde l'initiale du document Word en tant que Page web *.fichier mht contenant de la #MergeFields# de nouveau. J'ai ensuite fais la même chose que ci-dessus. En utilisant cela, je peut facilement effectuer le rendu d'un DataTable avec quelques notions de Html, les balises de tableau et de remplacer l'un des #MergeFields# avec un ensemble de la table.
Les Images peuvent être stockées sur votre serveur et l'url incorporé dans le document de trop.
Fait intéressant, les nouveaux formats de fichier Office 2007 sont en fait des fichiers zip - si vous renommer l'extension de .zip, vous pouvez ouvrir et visualiser leur contenu. Cela signifie que vous devriez être en mesure de changer de contenu, tels que des images en utilisant un simple C# zip bibliothèque.
@Dale Ragan: Qui va travailler pour Office 2003 format XML, mais ce n'est pas portable (comme, disons, .doc ou .les fichiers docx serait).
De lecture/écriture de ceux-ci, vous aurez besoin d'utiliser la Bibliothèque d'Objets Word contrôle ActiveX:
http://www.codeproject.com/KB/aspnet/wordapplication.aspx
@Danny Schtroumpf: en Fait, cet article décrit ce que sera devenu le format Office Open XML qui Rob a répondu avec. Je vais payer plus d'attention aux liens que je poste pour maintenant, assurez-vous qu'il pas obsolète. J'ai effectivement fait une recherche sur WordML, qui est ce qu'il a appelé à l'époque.
Je crois que le format Office Open XML est la meilleure façon d'aller.
LibreOffice prend également en charge sans tête interaction via l'API. Malheureusement il n'y a actuellement pas beaucoup d'informations sur cette fonctionnalité encore.. 🙁
Vous pourriez aussi utiliser un document Word generator. Il peut être utilisé pour le côté client ou côté serveur de déploiement. À partir de la description du projet:
Saisir: http://worddocgenerator.codeplex.com/
De téléchargement de SDK: http://www.microsoft.com/en-us/download/details.aspx?id=5124
Une autre alternative est Vent Docgen (avertissement - je suis le fondateur). Avec le Vent de la conception du modèle dans Word, y compris des images, des tableaux, des graphiques, jauges, et tout ce que vous voulez. Vous pouvez définir des balises où les données à partir d'un XML ou SQL source de données est insérée (y compris des fonctionnalités telles que des boucles forEach, l'importation, etc). Et puis de générer le rapport DOCX, PDF, HTML, etc.