[英]Replacing Content Controls in OpenXML
我需要一些東西作為占位符。 我起初將內容控制視為一種解決方案,但我遇到了一些問題。
然后我考慮將.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();
}
看一下使用Field。 郵件合並字段專為此目的而設計。
我不理解您的問題,如果您只對使用OpenXML SDK修改ContentControl / SDT時自動刪除ContentControl / SDT的解決方案感興趣,或者您希望它在以編程方式或用戶修改內容后消失。
如果是前者,我認為你必須自己將其刪除, 就像Bilel建議的那樣 。 如果是后者,你應該看一下這個屬性: ContentControl.Temporary (“當用戶鍵入控件時,或者當控件中的文本以編程方式更改時,ContentControl會自動刪除。當ContentControl自動從文檔中刪除時,控件中的文本仍保留在文檔中。“)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.