gpt4 book ai didi

openxml - 如何使用 OpenXml SDK 2.0 更改 Word 2007 中内容控件的内容?

转载 作者:行者123 更新时间:2023-12-02 11:07:51 27 4
gpt4 key购买 nike

快要被这个问题搞疯了。我确信它是如此简单,我只是错过了它,但我一生都无法找出如何使用 C# 中的 OpenXml SDK v2.0 更改 Word 2007 中的内容控件的内容。

我创建了一个带有纯文本内容控件的 Word 文档。该控件的标签是“FirstName”。在代码中,我想打开 Word 文档,找到此内容控件,然后更改内容而不丢失格式。

我最终找到的解决方案包括查找内容控件,在其后面插入一个运行,然后删除内容控件,如下所示:

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();
}

这确实改变了文本,但我丢失了所有格式。有谁知道我该怎么做?

最佳答案

我找到了一种更好的方法来执行上述操作 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();
}

我认为上述内容仅适用于纯文本内容控件。不幸的是,它并没有摆脱最终文档中的内容控制。如果我成功了,我会发布它。

http://msdn.microsoft.com/en-us/library/cc197932.aspx如果你想找一个富文本内容控件也是一个很好的引用。本节讨论向放置在富文本内容控件中的表添加行。

关于openxml - 如何使用 OpenXml SDK 2.0 更改 Word 2007 中内容控件的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2075505/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com