2013-03-20 60 views
2
设置自定义属性

到目前为止,我已经能够通过使用VSTO并通过添加一个包流活动文档设置为一个Word文档的自定义属性,因为它遵循如何将当前活动的Word文档中通过的OpenXML

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文件。

因此,我不应该使用doc.CustomXMLParts.Add(openxml);填充正确的xml文件,即document.zip \ docProps \ custom.xml

编辑 我已经试过Mishra提出的解决方案没有成功,即自定义属性并不总是保存。然而,由于他发表在这个解决方案,我又试了一次,我发现here,你首先需要将文件标记为未保存:

doc.CustomDocumentProperties.Add("MyProp", False, MsoDocProperties.msoPropertyTypeNumber, 123); 
doc.Saved = false; 
doc.Save(); 

回答

0

你不能使用CustomXMLParts集合设置custome属性。如果你打开文档更好,保持简单并使用CustomDocumentProperties集合,它非常快速和简单。只有在插入的数据变化很大的情况下,我才会在open doc中使用open XML。

+0

谢谢,这可行,但您需要将文档标记为未保存,以确保保存自定义属性。查看我的编辑 – 2013-03-25 10:25:58

0

检查this post - 它解释了如何给自定义属性到Word。

相关问题