2013-05-01 37 views
9

標題指出我收到的錯誤。我正在嘗試隱藏使用OpenXml的單詞doc中的所有文本。目前,當我嘗試並追加段落屬性時,我收到上述錯誤。我在網上找不到這個錯誤。返回錯誤無法插入OpenXmlElement「newChild」,因爲它是樹的一部分

 using (WordprocessingDocument wdDoc = WordprocessingDocument.Open(mDoc_copy, true)) 
     { 
      // Manage namespaces to perform XPath queries. 
      NameTable nt = new NameTable(); 
      XmlNamespaceManager nsManager = new XmlNamespaceManager(nt); 
      nsManager.AddNamespace("w", wordmlNamespace); 

      // Get the document part from the package. 
      // Load the XML in the document part into an XmlDocument instance. 
      XmlDocument xdoc = new XmlDocument(nt); 
      xdoc.Load(wdDoc.MainDocumentPart.GetStream()); 

      MainDocumentPart main = wdDoc.MainDocumentPart; 

      IEnumerable<OpenXmlElement> elem = main.Document.Body.Descendants().ToList(); 
      Paragraph p; 
      ParagraphProperties pp = new ParagraphProperties(); 
      ParagraphMarkRunProperties prmp = new ParagraphMarkRunProperties(); 
      Vanish v = new Vanish(); 
      apprmp.AppendChild<Vanish>(v); 
      pp.AppendChild<ParagraphMarkRunProperties>(apprmp); 


      foreach (Paragraph para in main.Document.Body.Descendants<Paragraph>().ToList()) 
      { 


        para.ParagraphProperties = pp; 

      } 
     } 
+0

您還需要將「消失」添加到'Run'屬性以使效果起作用。 – Flowerking 2013-05-01 20:46:59

+0

好吧,我必須首先消除每次運行,然後消除每個段落?或者我以某種方式將運行屬性追加到段落對象? – user1704863 2013-05-02 12:50:42

回答

25

代碼通常這錯誤可以通過克隆任何節點引起該異常,然後插入該克隆值是固定的。事情是這樣的:

LeftBorder leftBorder = new LeftBorder() { Style = BorderStyleValues.Thin }; 
TopBorder topBorder = new TopBorder() { Style = BorderStyleValues.Thin }; 
RightBorder rightBorder = new RightBorder() { Style = BorderStyleValues.Thin }; 
BottomBorder bottomBorder = new BottomBorder() { Style = BorderStyleValues.Thin }; 

Color color = new Color() { Auto = true, Rgb = rgbHexValue == string.Empty ? new HexBinaryValue("00000000") : new HexBinaryValue(rgbHexValue) }; 

leftBorder.Color = color; 
topBorder.Color = (Color)color.CloneNode(true); 
rightBorder.Color = (Color)color.CloneNode(true); 
bottomBorder.Color = (Color)color.CloneNode(true); 

這將創建一個Color實例,然後通過克隆原來的實例,然後將其插入使用相同的實例的所有邊界。

+0

這正是我所面臨的問題,並且這完全解決了它。謝謝! – 2013-07-15 19:43:20

+0

CloneNode! @amurra:你是救星! – slayernoah 2015-10-02 00:38:22

相關問題