Ich habe ein Programm, das einige Dokumente verarbeitet und basierend auf Geschäftsregeln erstellt CustomXMLParts und erstellt ContentControl für jeden Teil. Dies ist die Funktion, die CustomXMlPart mit OpenXML erstellt und ein Guid
als Attribut hinzufügt. Diese Guid
wird zum Verknüpfen mit einem ContentControl verwendet.Wie bekomme ich Guid ID von CustomXMLPart in OpenXML
private static void InsertMetadata(WordprocessingDocument document, Dictionary<string, object> metaData, string customPartName, string id = null)
{
XElement metadataElement = null;
CustomXmlPart customXml = null;
if (id != null)
{
metadataElement = new XElement(customPartName, new XAttribute("Guid", "NeedsID"));
customXml = document.MainDocumentPart.AddCustomXmlPart(CustomXmlPartType.CustomXml);
var guidID = document.MainDocumentPart.GetIdOfPart(customXml);
}
else
{
metadataElement = new XElement(customPartName);
customXml = document.MainDocumentPart.AddCustomXmlPart(CustomXmlPartType.CustomXml);
}
foreach (KeyValuePair<string, object> entry in metaData)
{
metadataElement.Add(new XElement(entry.Key, entry.Value));
}
using (StreamWriter sr = new StreamWriter(customXml.GetStream()))
{
sr.Write(metadataElement);
}
}
Es gibt eine WordAddIn , dass die Teile wie folgt liest und setzt das Guid
Attribut auf die ID des customXML Element
foreach (CustomXMLPart part in userAction.Application.ActiveDocument.CustomXMLParts.OfType<CustomXMLPart>())
{
var section = part.SelectSingleNode("MySection");
if (section!=null)
{
part.SetAttributeValue("Guid", part.Id.ToString());
}
}
Im WordAddIn die CustomXMLPart hat die Eigenschaft Id und es ist ein Guid. Das AddIn liest die Teile und aktualisiert das Attribut mit der GUID, die die ID des Teils darstellt.
Das Problem, das ich habe ist, dass ich die XML-Teile kein Problem erstellen kann, und ich kann das ContentControl erstellen und das Tag der Guid hinzufügen, so dass die CC und XMLpart verknüpft sind. Ich erstelle die CustomXMLPart dann die CC und ich füge die Guid zu verknüpfen. Allerdings wenn OpenXML mit i cant die ID erhalten als GUID, nachdem ich erstellt habe und fügte hinzu, um es in die DocumentPart
var guidID = document.MainDocumentPart.GetIdOfPart(customXml);
Dies stellt keine Guid zurück. Es gibt so etwas wie dieses Rd96388a5e95041a0
aber ich brauche eine Guid, so kann ich es als einen Tag an den CC hinzuzufügen. Ich konnte keine Möglichkeit finden, ein CustomXMLPart mit einem vordefinierten Guid hinzuzufügen, also erstelle ich nur das Teil und versuche dann, die ID zu erhalten.