我有一個程序處理一些文檔,並根據業務規則創建CustomXMLParts併爲每個零件創建ContentControl。 這是用OpenXML創建CustomXMlPart並將Guid
作爲屬性添加的函數。這個Guid
被用來鏈接到一個ContentControl。如何在OpenXML中獲取CustomXMLPart的Guid Id
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);
}
}
有一個WordAddIn 讀取這樣的部件,並設置Guid
屬性到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());
}
}
在WordAddIn的CustomXMLPart的ID具有屬性Id,它是一個GUID。 AddIn讀取零件並使用作爲零件標識的Guid更新屬性。
我遇到的問題是我可以創建XML部分沒有問題,我可以創建ContentControl並添加Guid的標籤,以便CC和XMLpart鏈接。 我創建CustomXMLPart然後CC和我添加guid鏈接。然而, 使用OPENXML時,我不能得到的ID爲我創建後一個GUID,並把它添加到DocumentPart
var guidID = document.MainDocumentPart.GetIdOfPart(customXml);
這不返回一個GUID。它返回這樣的事情Rd96388a5e95041a0
但我需要一個GUID,所以我可以將其添加爲標籤的CC。 我無法想象添加CustomXMLPart與預定義Guid的方式,所以我只是創建該部分,然後嘗試獲取Id。