Comment voulez-vous changer le contenu d'un contrôle de contenu dans Word 2007 avec OpenXml SDK 2.0?
Sur le point de devenir fou avec ce problème. Je suis sûr que c'est tellement simple que je suis juste en manque, mais je ne peux pas pour la vie de moi à trouver comment modifier le contenu d'un contrôle de contenu dans Word 2007 avec OpenXml SDK v2.0 en C#.
J'ai créé un document Word avec un simple contrôle de contenu de texte. L'étiquette de cette commande est "Prénom". Dans le code, je voudrais ouvrir le document Word, trouver ce contrôle de contenu, et de changer le contenu sans perdre la mise en forme.
La solution que j'ai finalement obtenu de travail impliquait de trouver le contrôle de contenu, l'insertion d'un courir après, puis en supprimant le contrôle de contenu en tant que tel:
using (WordprocessingDocument wordProcessingDocument = WordprocessingDocument.Open(filePath, true)) {
MainDocumentPart mainDocumentPart = wordProcessingDocument.MainDocumentPart;
SdtRun sdtRun = mainDocumentPart.Document.Descendants<SdtRun>()
.Where(run => run.SdtProperties.GetFirstChild<Tag>().Val == "FirstName").Single();
if (sdtRun != null) {
sdtRun.Parent.InsertAfter(new Run(new Text("John")), sdtRun);
sdtRun.Remove();
}
Ce n'modifier le texte, mais je perds tout le formatage. Quelqu'un sait-il comment je peux faire cela?
OriginalL'auteur Jason | 2010-01-15
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé une meilleure façon de le faire ci-dessus à l'aide de http://wiki.threewill.com/display/enterprise/SharePoint+and+Open+XML#SharePointandOpenXML-UsingWord2007ContentControls comme une référence. Vos résultats peuvent varier, mais je pense que cela va vous descendre à un bon début:
Je pense que le ci-dessus ne fonctionnera que pour le Texte Brut des contrôles de contenu. Malheureusement, ce n'est pas se débarrasser du contrôle de contenu dans le document final. Si je reçois que de travail, je vais le poster.
http://msdn.microsoft.com/en-us/library/cc197932.aspx est aussi une bonne référence si vous souhaitez trouver un contenu de texte enrichi de contrôle. Cela parle d'ajouter des lignes à une table qui a été placé dans un contenu de texte enrichi de contrôle.
OriginalL'auteur Jason
Votre première approche pour supprimer le sdtRun et l'ajout d'un nouveau sera bien évidemment supprimer la mise en forme parce que vous êtes seulement l'ajout d'un terme, mais pas le RunStyle. Pour conserver la mise en forme, vous devriez créer des éléments comme
Votre deuxième approche pour remplacer toutes les
Decendants<Text>
va travailler pour le Contenu de Texte Brut de Contrôle seulement en raison d'un Contenu de Texte enrichi le Contrôle n'a pas SdtRun élément. Contenu de Texte enrichi de Contrôle est SdtBlock avec SdtContent éléments. Un contenu de texte enrichi contrôle peut avoir plusieurs paragraphes, plusieurs parcours et plusieurs Textes. Ainsi, votre code,sdtRun.Descendants<Text>().First().Text = replacementText
, sera imparfait pour un Contenu de Texte enrichi de Contrôle. Il n'y a pas une seule ligne de code pour remplacer l'ensemble du texte d'un contenu riche, de contrôle et encore conserver la mise en forme.Je n'ai pas compris ce que tu veux dire par "ce n'est pas se débarrasser du contrôle de contenu dans le document final"? Je pensais que votre exigence est ici pour modifier le texte (contenu) n'est qu'en préservant le contrôle du contenu et de la mise en forme.
OriginalL'auteur Bijay Kusle
Un EXCELLENT moyen de travailler sur la façon d'obtenir le résultat souhaité est d'utiliser le document réflecteur outil qui est fourni avec le SDK Open XML 2.0....
Par exemple, vous pouvez:
Il n'est pas parfait, mais il est incroyablement utile. Vous pouvez aussi consulter directement le balisage de document et de voir les changements que le remplissage du contrôle causé.
C'est un peu fragile façon de le faire parce que Wordprocessing ML est peut être compliqué; il est facile de se louper. Pour de simples contrôles de texte, je viens d'utiliser cette méthode:
Espère que ça aide, d'une certaine façon. 😀
OriginalL'auteur user246091
J'ai également eu à trouver et remplacer du texte dans le pied de page. Vous pouvez les trouver en utilisant le code suivant:
OriginalL'auteur Jason
Une autre solution serait
OriginalL'auteur pungggi