gpt4 book ai didi

c# - 如何从 Word 文档复制富文本内容控件的内容并使用 Open XML SDK 删除控件本身

转载 作者:行者123 更新时间:2023-12-04 13:53:05 28 4
gpt4 key购买 nike

我正在尝试将富文本内容控件的内容从一个 Word 文档复制到另一个 Word 文档。每个富文本内容控件都包含一个文本块和一些纯文本内容控件。下面的代码似乎工作...

using (WordprocessingDocument doc = WordprocessingDocument.Open(destinationFile, true))
{
MainDocumentPart mainPart = doc.MainDocumentPart;
Dictionary<string, SdtBlock> sdtBlocks = getContentControlsFromDocument(sourceFile);
foreach (KeyValuePair<string, SdtBlock> sdtBlock in sdtBlocks)
{
SdtElement control = mainPart.Document.Body.Descendants<SdtElement>().Where(r =>
{
var tag = r.SdtProperties.GetFirstChild<Tag>();
return tag != null && tag.Val == sdtBlock.Key.ToLower();
}).FirstOrDefault();

SdtContentBlock cloneSdtContentBlock = (SdtContentBlock)sdtBlock.Value.Descendants<SdtContentBlock>().FirstOrDefault().Clone();
control.Parent.InsertAfter(cloneSdtContentBlock, control);
control.Remove();
}
mainPart.Document.Save();
}
但是当我尝试在 destinationFile 中查找所有内容控件时使用下面的代码
string key = "tag_name";
List<SdtElement> controls = mainPart.Document.Body.Descendants<SdtElement>().Where(r =>
{
var tag = r.SdtProperties.GetFirstChild<Tag>();
return tag != null && tag.Val == key.ToLower();
}).ToList();
我找不到那些在从 sourceFile 复制的富文本内容控件中的内容。 .换句话说,我只想复制富文本内容控件的内容而不复制控件本身。
更新:
为了简化问题。我有一个富文本内容控件,它可能有纯文本和几个纯文本内容控件。我所需要的只是复制(仅)此富文本内容控件中的内容,该控件将整个内容包装到另一个 Word 文档中。

最佳答案

与此同时,我设法自己解决了这个问题。这是解决方案,因此它可能对其他人有用。

using (WordprocessingDocument doc = WordprocessingDocument.Open(@"C:\tmp\test-1.docx", true))
{
MainDocumentPart mainPart = doc.MainDocumentPart;
foreach (var conditialTemplate in conditionalTemplates)
{
List<SdtElement> controls = mainPart.Document.Body.Descendants<SdtElement>().Where(r =>
{
var tag = r.SdtProperties.GetFirstChild<Tag>();
return tag != null && tag.Val == conditialTemplate.ToLower();
}).ToList();

foreach (var control in controls)
{
if (control != null)
{
SdtProperties props = control.Elements<SdtProperties>().FirstOrDefault();
Tag tag = props.Elements<Tag>().FirstOrDefault();
Console.WriteLine("Tag: " + tag.Val);

string theRightBlock = "A";

SdtBlock theRightSdtBlock = GetTheRightConditionalSdtBlock(theRightBlock, tag.Val);
if (theRightSdtBlock != null)
{
OpenXmlElement parent = control.Parent;
SdtBlock clone = new SdtBlock();
clone = (SdtBlock)theRightSdtBlock.Clone();
var elements = clone.GetFirstChild<SdtContentBlock>().ChildElements.ToList();
elements.Reverse();
elements.ForEach(child =>
{
parent.InsertAfter(child.Clone() as OpenXmlElement, control);
});
control.Remove();
}
}
}
}
mainPart.Document.Save();
}

关于c# - 如何从 Word 文档复制富文本内容控件的内容并使用 Open XML SDK 删除控件本身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67287481/

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