即将生气这个问题.我确信这很简单,我只是错过了它,但我不能为我的生活找到如何使用C#中的OpenXml SDK v2.0更改Word 2007中的内容控件的内容.
我创建了一个带有纯文本内容控件的Word文档.此控件的标记是"FirstName".在代码中,我想打开Word文档,找到此内容控件,并更改内容而不会丢失格式.
我最终开始工作的解决方案包括找到内容控件,在其后面插入一个run,然后删除内容控件:
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();
}
Run Code Online (Sandbox Code Playgroud)
这确实改变了文本,但我丢失了所有格式.有谁知道我怎么做到这一点?
我找到了一个更好的方法来使用http://wiki.threewill.com/display/enterprise/SharePoint+and+Open+XML#SharePointandOpenXML-UsingWord2007ContentControls作为参考.您的结果可能会有所不同,但我认为这会让您有一个良好的开端:
using (WordprocessingDocument wordprocessingDocument = WordprocessingDocument.Open(filePath, true)) {
var sdtRuns = mainDocumentPart.Document.Descendants<SdtRun>()
.Where(run => run.SdtProperties.GetFirstChild<Tag>().Val.Value == contentControlTagValue);
foreach (SdtRun sdtRun in sdtRuns) {
sdtRun.Descendants<Text>().First().Text = replacementText;
}
wordprocessingDocument.MainDocumentPart.Document.Save();
}
Run Code Online (Sandbox Code Playgroud)
我认为上述内容仅适用于纯文本内容控件.不幸的是,它没有摆脱最终文档中的内容控制.如果我开始工作,我会发布它.
如果要查找富文本内容控件,http://msdn.microsoft.com/en-us/library/cc197932.aspx也是一个很好的参考.这个讨论如何将行添加到放置在富文本内容控件中的表中.
| 归档时间: |
|
| 查看次数: |
20222 次 |
| 最近记录: |