2016-11-08 17 views
2

如何成功刪除文檔中給定ID的altChunk。我遵循的過程是 -刪除altChunk

MainDocumentPart mainPart = theDoc.MainDocumentPart; 
mainPart.DeletePart(mainPart.GetPartById("AltChunkIdA1")); 

我在給定的sdt後添加altChunk。對於添加altChunk,我有下面的代碼 -

string altSchedChunkId = "AltChunkIdA1"; 
AlternativeFormatImportPart schedChunk = mainPart.AddAlternativeFormatImportPart(AlternativeFormatImportPartType.WordprocessingML, altSchedChunkId); 
schedChunk.FeedData(File.Open(FileA12, FileMode.Open)); 
      AltChunk altSchedChunk = new AltChunk(); 
      altSchedChunk.Id = altSchedChunkId; 

      OpenXmlElement parent = sdtRunSchedTerms.Parent; 
      parent.InsertAfter(altSchedChunk, sdtRunSchedTerms); 

但它似乎沒有工作了。每次嘗試編輯文檔時,都會添加一個具有相同ID的新altChunk,而不是altChunk被刪除。

由於提前,

NEHA

回答

0

我有塊同樣的問題,但我想我解決了這個問題。

如果你的代碼仔細看添加塊,你看,它實際上做了兩兩件事:

  1. 創建塊(AddAlternativeFormatImportPart

  • 在文檔的某處添加對塊的引用(InsertAfter)。
  • 刪除塊的代碼不會刪除對塊的引用。如果您隨後添加一個新塊並使用相同的編號添加參考,您將最終出現兩次塊。

    請參閱AltChunk class documentation on MSDN瞭解更多詳情。

    我使用此代碼刪除任何現有的塊引用。

    var altChunks = mainPart.RootElement.Descendants<AltChunk>().Where(e => e.Id == altChunkId); 
    
    foreach (var altChunk in altChunks) 
    { 
        altChunk.Remove(); 
    } 
    

    之後,您可以使用DeletePart()來刪除塊本身。

    我必須承認,我發現這是通過試驗和錯誤,所以我不是100%確定它是推薦的方式來做到這一點,但它似乎工作。

    要得到什麼塊實際上是一個更好的感覺,我一個解壓的.docx文件(7-zip是願意這樣做),並發現了一個目錄其中包含組塊,以及目錄_rels用文件document.xml.rels裏面。後者列出了對大塊的參考,即它們應該插入的位置。