问题
The Title states the error I am getting. I'm trying to hide all the text in a word doc using OpenXml. Currently when I try and append the Paragraph properties I receive the above error. I can't find much about this error online.
Code that returns error
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;
}
}
回答1:
Normally this error can be fixed by Cloning whatever node is causing the exception and then inserting that cloned value. Something like this:
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);
This will create one Color
instance and then use the same instance for all the borders by cloning the original instance then inserting it.
来源:https://stackoverflow.com/questions/16320537/cannot-insert-the-openxmlelement-newchild-because-it-is-part-of-a-tree