Question

J'ai un projet dans lequel j'aimerais générer un export de rapport au format MS Word.Le rapport comprendra des images/graphiques, des tableaux et du texte.Quelle est la meilleure façon de procéder?Des outils tiers ?Quelles sont vos expériences ?

Était-ce utile?

La solution

La réponse dépendra légèrement du fait que l'application s'exécute sur un serveur ou sur la machine client.Si vous utilisez un serveur, vous souhaiterez utiliser l'un des formats de génération Office basés sur XML, car il existe des problèmes connus lors de utiliser Office Automation sur un serveur.

Cependant, si vous travaillez sur la machine client, vous avez le choix entre utiliser 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 versions ultérieures, soit de manière native, soit via des service packs.Un inconvénient est cependant que vous ne pourrez peut-être pas intégrer certains types de graphiques ou d'images que vous souhaitez afficher.

La meilleure façon de procéder dépendra en grande partie du temps dont vous disposerez pour investir dans le développement.Si vous suivez la voie de la bureautique, il existe de nombreux bons tutoriels disponibles via Google et assez simples à apprendre.Cependant, le format Open Office XML est relativement nouveau, vous trouverez donc peut-être la courbe d'apprentissage un peu plus longue.

Informations sur Office Open XML

Autres conseils

Bibliothèque gratuite DocX pour créer des documents DocX, activement développés et très simples et intuitifs à utiliser.Depuis que CodePlex est en train de mourir, le projet a été déplacé vers github.

J'ai passé la semaine dernière à me mettre au courant Bureau Open XML.Nous disposons d'une application de base de données qui stocke les données d'enquête que nous souhaitons rapporter dans Microsoft Word.Vous pouvez réellement créer des fichiers Word 2007 (docx) à partir de zéro en C#.La version 2 du SDK Open XML comprend une application intéressante appelée Document Reflector qui fournira en fait le code C# pour recréer entièrement un document Word.Vous pouvez utiliser une partie ou la totalité du code et remplacer les bits que vous souhaitez modifier à la volée.Le fichier d'aide inclus avec le SDK contient également de bons exemples de code.

Il n'est pas nécessaire d'avoir Office Interop ou tout autre logiciel Office sur le serveur : les nouveaux formats sont 100 % XML.

Avez-vous envisagé d'utiliser .RTF comme alternative ?

Il prend en charge l'intégration d'images et de tableaux ainsi que de texte, s'ouvre par défaut à l'aide de Microsoft Word et, bien que ses fonctionnalités soient plus limitées (comptez tout formatage avancé), pour quelque chose qui ressemble et s'ouvre comme un document Word, ce n'est pas loin.

Vos utilisateurs finaux ne le remarqueront probablement pas.

j'ai trouvé Asposer des mots être le meilleur car tout le monde ne peut pas ouvrir les fichiers au format Office Open XML/*.docx et l'interopérabilité de Word et l'automatisation de Word peuvent être boguées.Aspose Words prend en charge la plupart des types de fichiers de documents à partir de Word 97.

Il s'agit d'un composant payant mais bénéficiant d'un excellent support.L'autre alternative déjà suggérée est RTF.

Pour générer des documents Word avec Office Automation au sein de .NET, notamment en C# ou VB.NET :

  1. Ajouter le Microsoft.Office.Interop.Word référence d'assemblage à votre projet.Le chemin est \Visual Studio Tools pour Office\PIA\Office11\Microsoft.Office.Interop.Word.dll.

  2. Suivez l'exemple de code Microsoft que vous pouvez trouver ici: http://support.microsoft.com/kb/316384/en-us.

Schmidty, si vous souhaitez générer des documents Word sur un serveur web vous aurez besoin d'une licence pour chacun client (pas seulement le serveur Web).Voir cette section dans la première lien Rob a posté :

" Outre les problèmes techniques, vous devez également prendre en compte les problèmes de licence.Les directives actuelles en matière de licences empêchent l'utilisation des applications Office sur un serveur pour répondre aux demandes des clients, à moins que ces clients ne disposent eux-mêmes de copies sous licence d'Office.L'utilisation de l'automatisation côté serveur pour fournir des fonctionnalités Office à des postes de travail sans licence n'est pas couverte par le contrat de licence utilisateur final (CLUF)."

Si vous remplissez les conditions de licence, je pense que vous devrez utiliser COM Interop - pour être précis, le Assemblages d'interopérabilité primaires Office XP.

Découvrez VSTO (Visual Studio Tools pour Office).Il est assez simple de créer un modèle Word, d'y injecter un îlot de données XML, puis de l'envoyer au client.Lorsque l'utilisateur ouvre le document dans Word, Word lit le fichier XML, le transforme en WordML et le restitue.Vous voudrez regarder la classe ServerDocument de la bibliothèque VSTO.Aucune licence supplémentaire n'est requise d'après mon expérience.

J'ai eu beaucoup de succès en utilisant Syncfusion Backoffice DocIO qui prend en charge les formats doc et docx.

Dans les versions précédentes, il ne prenait pas tout en charge sous Word, mais selon votre liste, nous l'avons testé avec des tableaux et du texte comme approche de publipostage et cela a bien fonctionné.

Je ne suis pas sûr de l'importation d'images.Sur leur page de présentation http://www.syncfusion.com/products/DocIO/Backoffice/features/default.aspx ça dit

Blockquote Essential Docio a pris en charge l'insertion d'images scalaires et vectorielles dans le document, dans presque tous les formats.Bitmap, gif, png et tiff sont quelques-uns des types d'images courants pris en charge.

Cela vaut donc la peine d'être considéré.

Comme d'autres l'ont mentionné, vous pouvez créer un document RTF, il existe de bonnes bibliothèques RTF pour .net comme http://www.codeproject.com/KB/string/nrtftree.aspx

J'ai fait face à ce problème et créé une petite bibliothèque pour cela.Il a été utilisé dans plusieurs projets puis j'ai décidé de le publier.C'est gratuit et très très simple mais je suis sûr que cela vous aidera dans votre tâche.Appelez la bibliothèque Office Open XML, http://invoke.co.nz/products/docx.aspx.

j'ai écrit un série d'articles de blog sur la génération de documents Open XML WordprocessingML.Mon approche consiste à créer un modèle de document contenant des contrôles de contenu et, dans chaque contrôle de contenu, à écrire une expression XPath qui définit comment récupérer le contenu d'un document XML contenant les données qui pilotent le processus de génération de document.Le code est gratuit et est sous licence le Licence réciproque Microsoft (Ms-RL).Dans cette même série d’articles de blog, j’explore également une approche dans laquelle vous écrivez du code C# dans les contrôles de contenu.Le processus de génération de document traite ensuite le document modèle et génère un programme C# qui génère les documents souhaités.L'un des avantages de cette approche est que vous pouvez utiliser n'importe lequel source de données comme source de données pour le processus de génération de documents.Ce code est également sous licence Microsoft Reciprocal License.

Je fais actuellement exactement cette chose.

Si le document n'est pas très volumineux, ne contient pas d'images, etc., je le stocke au format RTF avec #MergeFields# et je le remplace simplement par du contenu, en envoyant le résultat à l'utilisateur sous forme de RTF.

Pour les documents plus volumineux, y compris les images et les images insérées dynamiquement, j'enregistre le document Word initial en tant que fichier *.mht de page Web unique contenant à nouveau le #MergeFields#.Je fais ensuite la même chose que ci-dessus.En utilisant cela, je peux facilement restituer un DataTable avec quelques balises de table HTML de base et remplacer l'un des #MergeFields# par une table entière.

Les images peuvent être stockées sur votre serveur et l'URL également intégrée au document.

Il est intéressant de noter que les nouveaux formats de fichiers Office 2007 sont en réalité des fichiers zip : si vous renommez l'extension en .zip, vous pouvez les ouvrir et voir leur contenu.Cela signifie que vous devriez pouvoir basculer du contenu tel que des images vers l'intérieur et l'extérieur à l'aide d'une simple bibliothèque zip C#.

@Dale Ragan :Cela fonctionnera pour le format XML Office 2003, mais ce n'est pas portable (comme le seraient, par exemple, les fichiers .doc ou .docx).

Pour les lire/écrire, vous devrez utiliser le contrôle ActiveX de la bibliothèque d'objets Word :

http://www.codeproject.com/KB/aspnet/wordapplication.aspx

@Danny Schtroumpf :En fait, cet article décrit ce qui deviendra le format Office Open XML avec lequel Rob a répondu.Je ferai plus attention aux liens que je poste pour l'instant pour m'assurer qu'ils ne sont pas obsolètes.En fait, j'ai fait une recherche sur WordML, c'est ainsi qu'on l'appelait à l'époque.

Je pense que le format Office Open XML est la meilleure solution.

LibreOffice prend également en charge l'interaction sans tête via l'API.Malheureusement, il n'y a pas encore beaucoup d'informations sur cette fonctionnalité pour le moment.:(

Vous pouvez également utiliser le générateur de documents Word.Il peut être utilisé pour un déploiement côté client ou côté serveur.D'après la description du projet :

WordDocumentGenerator est un utilitaire pour générer des documents Word à partir de modèles utilisant Visual Studio 2010 et Open XML 2.0 SDK.WordDocumentGenerator aide à générer des documents de mots à la fois non réfreshables et actualisés en fonction des modèles prédéfinis en utilisant des modifications de code minimum.Les contrôles de contenu sont utilisés comme espaces réservés pour la génération de documents.Il prend en charge Word 2007 et Word 2010.

Attrape le: http://worddocgenerator.codeplex.com/

Télécharger le SDK : http://www.microsoft.com/en-us/download/details.aspx?id=5124

Une autre alternative est Docgen au vent (avertissement - je suis le fondateur).Avec Windward, vous concevez le modèle dans Word, y compris les images, les tableaux, les graphiques, les jauges et tout ce que vous voulez.Vous pouvez définir des balises dans lesquelles les données d'une source de données XML ou SQL sont insérées (y compris des fonctionnalités telles que les boucles forEach, l'importation, etc.).Et puis générez le rapport au format DOCX, PDF, HTML, etc.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top