La duplication d'un document Word à l'aide d'OpenXml et C#
Je suis à l'aide de Word et OpenXml pour fournir la fonctionnalité de fusion et publipostage dans un C# ASP.NET application web:
1) Un document est téléchargé avec un nombre pré-défini de chaînes de substitution.
2) à l'Aide de l'OpenXML SDK 2.0 j'ouvre le document Word, obtenir le mainDocumentPart comme une chaîne et d'en effectuer la substitution à l'aide de Regex.
3) j'ai ensuite créer un nouveau document à l'aide d'OpenXML, ajouter un nouveau mainDocumentPart et insérez la chaîne résultant de la substitution dans ce mainDocumentPart.
Toutefois, le formatage et les styles, etc. sont perdus dans le nouveau document.
Je devine je peux copier et ajouter le Style, les Définitions, les Commentaires des parties etc.. individuellement pour imiter l'origine du document.
Cependant est-il une méthode à l'aide de Open XML pour dupliquer un document me permettant d'effectuer les substitutions sur la nouvelle copie?
Grâce.
OriginalL'auteur TonE | 2009-07-17
Vous devez vous connecter pour publier un commentaire.
Ce bout de code devrait copie de toutes les pièces à partir d'un document existant à un nouveau.
Est-il un moyen de faire quelque chose de similaire, la seule différence étant que le contenu dans le
mainDoc
doit être ajouté à la fin d'un document existant?Oui, bien que beaucoup plus difficile, car beaucoup de données à partir de pièces de deux documents doivent être fusionnées. Heureusement, Eric Blanc a construit un ensemble de PowerTools pour OpenXML qui gère cette tâche ardue pour vous. En particulier, jetez un oeil à la DocumentBuilder que j'ai utilisé pour ajouter un document à un autre dans le passé. A travaillé comme un charme!
OriginalL'auteur bernhof
Je seconde l'utilisation de Contrôles de Contenu de la recommandation. À l'aide de marquer les zones de votre document où vous souhaitez effectuer la substitution est de loin la meilleure façon de le faire.
Comme pour dupliquer le document (et en conservant l'intégralité du contenu du document, les styles et tous), il est relativement facile:
Réellement trouver les contrôles de contenu est un morceau de gâteau à l'aide de LINQ. L'exemple suivant renvoie tous les Simples contrôles de contenu de Texte (qui sont typés comme SdtRun):
La
<Run>
et<Text>
éléments ne sont pas déjà exister, mais le processus de création est simple:Espère que ça aide quelqu'un. 😀
OriginalL'auteur user246091
J'y ai fait des choses similaires, mais au lieu de texte à l'aide de chaînes de substitution, j'utilise Word Contrôles de Contenu. J'ai documenté quelques-uns des détails dans le blog suivant, SharePoint et Open Xml. La technique est pas spécifiques à SharePoint. Il est possible de réutiliser le modèle en pur ASP.NET ou d'autres applications.
Aussi, je vous encourage FORTEMENT à revoir Eric Blanc du Blog pour des conseils, des astuces et des techniques concernant la Open Xml. Plus précisément, découvrez la -manipulation de la mémoire de l'Open Xml post, et la Mot contrôles de contenu postes. Je pense que vous trouverez ces beaucoup plus utile dans le long terme.
Espère que cette aide.
OriginalL'auteur Pete Skelly
Comme un addenda à la ci-dessus; ce qui est peut-être plus utile est de trouver les contrôles de contenu qui ont été marqués (en utilisant le mot GUI). J'ai récemment écrit un logiciel qui a peuplé les modèles de document qui contenait les contrôles de contenu avec des étiquettes attachées. Les trouver est simplement une extension de la ci-dessus requête LINQ:
J'ai eu ce code d'ailleurs, mais ne me souviens pas où, à l'instant; le crédit va à eux.
De la requête crée un IEnumerable d'un type anonyme qui contient le contrôle de contenu et de ses associés de la balise en tant que propriétés. Pratique!
OriginalL'auteur user246091
OriginalL'auteur Alessandro Bordignon
Lorsque vous regardez un document openxml par la modification de l'extension de zip et de les ouvrir à vous voir que ce mot sous-dossier contient un _rels dossier où toutes les relations sont répertoriés. Ces relations de point pour les pièces que vous avez mentionné (style ...). En fait, vous avez besoin de ces pièces, car ils contiennent de la définition de la mise en forme. Afin de ne pas les copier entraînera le nouveau document à utiliser la mise en forme définie dans la normale.dot fichier et non pas celle qui est définie dans le document d'origine. Donc, je pense que vous avez à les copier.
OriginalL'auteur crauscher