J'ai un programme qui traite certains documents et, basé sur des règles métier, crée CustomXMLParts et crée ContentControl pour chaque partie. C'est la fonction qui crée le CustomXMlPart avec OpenXML et ajoute un Guid
en tant qu'attribut. Ce Guid
est utilisé pour lier à un ContentControl.Comment obtenir l'ID Guid de CustomXMLPart dans 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);
}
}
Il y a un WordAddIn qui lit les parties comme celle-ci et définit l'attribut Guid
à l'ID de l'élément CustomXML
foreach (CustomXMLPart part in userAction.Application.ActiveDocument.CustomXMLParts.OfType<CustomXMLPart>())
{
var section = part.SelectSingleNode("MySection");
if (section!=null)
{
part.SetAttributeValue("Guid", part.Id.ToString());
}
}
Dans le WordAddIn le CustomXMLPart a la propriété Id et est un Guid. L'AddIn lit les pièces et met à jour l'attribut avec le Guid correspondant à l'ID de la pièce. Le problème que je rencontre est que je peux créer les parties XML sans problème et je peux créer le ContentControl et ajouter le tag du Guid pour que CC et XMLpart soient liés. Je crée le CustomXMLPart puis le CC et i Ajoutez le guid à lier. Cependant, lorsque vous utilisez OpenXML je ne peux pas obtenir l'ID comme guid après que je l'ai créé et ajouté à la DocumentPart
var guidID = document.MainDocumentPart.GetIdOfPart(customXml);
Cela ne renvoie pas Guid. Elle retourne quelque chose comme ça Rd96388a5e95041a0
Mais je besoin d'un Guid si je peux l'ajouter comme une étiquette à la CC. Je n'arrivais pas à trouver un moyen d'ajouter un CustomXMLPart avec un Guid prédéfini, donc je crée simplement la pièce, puis j'essaie d'obtenir l'Id.