簡體   English   中英

OpenXML-合並文檔時項目符號點轉換為編號列表

[英]OpenXML - Bullet Points get transformed to numbered list when merging documents

我有兩個要部分合並的文檔。

我從RTF內容控件內部的文檔A中提取了部分內容,並使用AppendChild和CloneNode(true)將內容控件的sdtContent的所有子元素復制到文檔B中的另一個sdtContent (深度克隆):

foreach (var srcChildElement in sourceDocumentSdtContentBlockNode.ChildElements)
{
    targetSdtContentBlock.AppendChild(srcChildElement.CloneNode(true);
}

問題是,如果我的源文檔A中的內容(列表項)以項目符號格式設置,則文檔B中的結果將被編號為列表項。

克隆后,為什么生成的樣式不像源中的樣式? 我以為只要不操作就可以保持其風格。 在文檔B中似乎也沒有格式問題。 我可以手動插入項目符號或編號列表,而不會出現問題。

我什至創建了兩個完全新的word文檔,並且發生了相同的事情,因此,現有文件肯定不是問題。

更新: 我發現文檔( https://msdn.microsoft.com/zh-cn/library/office/ee922775(v=office.14).aspx )中有單獨的編號定義我復制的節點。 當我克隆節點時,此信息未包含在單獨的編號定義中。 有沒有一種方法可以將節點復制到新文檔,並告訴它保留編號定義中的編號樣式? 另一種選擇是手動檢查克隆的節點是否包含numPr元素,如果是,則還提取定義(包括更改和重新分配ID)-希望使用一種不太復雜的方法來復制元素,並希望有一個:- )

有任何想法嗎?

好吧,我確實設法解決了這個問題。 如前所述,編號信息存儲在單獨的部分(或文檔zip中的文件)中: https : //msdn.microsoft.com/zh-cn/library/office/ee922775(v= office.14) .aspx

我從源代碼的NumberingDefinitions (在NumberingPart中)復制了必要的內容(段落中有numPr )。 通過查找numIdnumPr到目標文件。

我將num元素以及相應的abstractNum元素克隆到了目標。 為此,我還替換了numIdabstractNumIdnsid (十六進制值)之類的ID(使用目標中的現有元素ID將所有ID遞增1),以確保不會發生任何沖突。

有點工作,但非常可行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM