到目前为止,我已经能够通过使用VSTO并将活动文档中的包流添加到Word文档来为Word文档设置自定义属性
public static void SetCustomProperty(Microsoft.Office.Interop.Word.Document doc, string propertyName, object propertyValue)
{
using (MemoryStream stream = new MemoryStream())
using ((WordprocessingDocument wordDoc = WordprocessingDocument.Create(stream, WordprocessingDocumentType.Document, true))
{
SetProperty(wordDoc, propertyName, propertyValue);
// Flush the contents of the package.
wordDoc.Package.Flush();
// Convert back to flat OPC by using this in-memory package.
XDocument xDoc = OpcHelper.OpcToFlatOpc(wordDoc.Package);
// Return the xml string.
string openxml = xDoc.ToString();
// Add to Word doc
doc.CustomXMLParts.Add(openxml);
}
}
SetProperty
方法的工作原理如here所示,可以找到OpcHelper here并解释为here。
问题是我的自定义属性是插入位于OpenXML文件格式的 document.zip \ customXml 文件夹中的xml文件(例如item1.xml)中。稍后,当我想要阅读我的自定义属性时,我使用空的WordProcessingDocument.CustomFilePropertiesPart
。实际上我发现CustomFilePropertiesPart
引用了 document.zip \ docProps \ custom.xml 文件。
所以我应该使用什么来填充正确的xml文件,而不是使用doc.CustomXMLParts.Add(openxml);
,而不是 document.zip \ docProps \ custom.xml ?
修改 我已经尝试了Mishra提出的解决方案但没有成功,即自定义属性并不总是保存。但是,自从他发布此解决方案后,我再次尝试,我发现here您首先需要将文档标记为未保存:
doc.CustomDocumentProperties.Add("MyProp", False, MsoDocProperties.msoPropertyTypeNumber, 123);
doc.Saved = false;
doc.Save();
答案 0 :(得分:0)
检查this post - 它解释了如何将自定义属性提供给Word。
答案 1 :(得分:0)
您无法使用CustomXMLParts集合设置custome属性。如果您打开文档更好,请保持简单并使用CustomDocumentProperties集合,它非常快速和简单。只有当要插入的数据变化很大时,我才会在open doc中使用开放式XML。