2013-05-01 1 views
9

В заголовке указывается ошибка, которую я получаю. Я пытаюсь скрыть весь текст в слове doc, используя OpenXml. В настоящее время, когда я пытаюсь добавить свойства Paragraph, я получаю вышеуказанную ошибку. Я не могу найти много об этой ошибке в Интернете.Невозможно вставить 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

Вам необходимо добавить Vanish в свойства 'Run', чтобы заставить эффект работать. – Flowerking

+0

Итак, я должен сначала прогнать каждый прогон, а затем исчезнуть каждый абзац? или я каким-либо образом добавляю свойства запуска к объекту Paragraph? – user1704863

ответ

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

Это была именно та проблема, с которой я столкнулся, и это исправить. Благодаря! –

+0

CloneNode! @amurra: Ты спасатель! – slayernoah

 Смежные вопросы

  • Нет связанных вопросов^_^