Ing*_*als 13 c# ms-word openxml openxml-sdk word-contentcontrol
我需要一些东西作为占位符.我起初将内容控制视为一种解决方案,但我遇到了一些问题.
然后我考虑将.docx中的CustomXML添加到其中,但由于i4i的诉讼而拒绝了.
然后我决定通过OpenXML SDK 2.0简单地改变内容控制的文本,但即使它如此标记,内容控制也不会消失.我想它不知道文本发生了变化,除非它发生在单词内部.
我或许可以删除CC并放置文本,但我担心它可能带来的格式和样式问题,而且它会违反内容控制的目的.
然后我开始想知道我是否可以定义Word可以识别的自己的占位符.也许通过积木.它不需要做任何事情,除了易于使用OpenXML找到并以某种方式可标记,所以我知道用什么来替换它.我不确定可以用Building Blocks做什么,但我希望它能够做到.
不确定哪种解决方案最适合我,但我需要的是:
a)一些容易放在模板中的东西,也许是预定义的内容控件占位符,你可以放置在你想要的地方并按照你喜欢的样式.
b)添加数据后,删除所有占位符,不再修改.它保持在占位符中定义的样式/格式.
要收回,我需要回答
如何在OpenXML SDK中编辑内容控件,以便在添加文本后删除它们.
-要么-
我可以为Word文档定义自己的自定义OpenXML标记,然后我可以替换它吗?
也许这可以帮到你,
private void DeleteSdtBlockAndKeepContent(MainDocumentPart mainDocumentPart, string sdtBlockTag)
{
List<SdtBlock> sdtList = mainDocumentPart.Document.Descendants<SdtBlock>().ToList();
SdtBlock sdtA = null;
foreach (SdtBlock sdt in sdtList)
{
if (sdt.SdtProperties.GetFirstChild<Tag>().Val.Value == sdtBlockTag)
{
sdtA = sdt;
break;
}
}
OpenXmlElement sdtc = sdtA.GetFirstChild<SdtContentBlock>();
OpenXmlElement parent = sdtA.Parent;
OpenXmlElementList elements = sdtc.ChildElements;
var mySdtc = new SdtContentBlock(sdtc.OuterXml);
foreach (OpenXmlElement elem in elements)
{
string text = parent.FirstChild.InnerText;
parent.Append((OpenXmlElement)elem.Clone());
}
sdtA.Remove();
}
Run Code Online (Sandbox Code Playgroud)