2013-05-01 2 views
9

제목에 오류가 표시됩니다. 내가 노력하고있어 워드 프로세서의 모든 텍스트를 OpenXml로 숨 깁니다. 현재 단락 속성을 추가하려고하면 위의 오류가 발생합니다. 온라인에서이 오류에 대해 많이 알 수 없습니다. 오류를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를 추가해야합니다. – Flowerking

+0

오케이 그럼 각 문단을 먼저 사라지게 한 다음 각 문단을 사라지게해야합니까? 또는 어떻게 실행 속성을 단락 개체에 추가합니까? – user1704863

답변

25

를 반환

코드는 일반적으로 이러한 오류는 해당 복제의 값을 삽입 한 후 예외를 발생하고 어떤 노드 복제하여 고정 될 수있다. 이런 식으로 뭔가 :이 하나 개 Color 인스턴스를 생성 한 후 다음 원래 인스턴스를 복제 삽입하여 모든 국경에 동일한 인스턴스를 사용합니다

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); 

.

+0

그게 바로 제가 직면 한 문제였습니다. 그리고 이것으로 완벽하게 고쳐졌습니다. 감사! –

+0

CloneNode! @amurra : 당신은 생명의 은인입니다! – slayernoah