How to programmatically access the built-in properties of an open xml worddoc file

I would like to access some built-in properties (for example, the author, last modified date, etc.) of the open dml file of the xml file. I would like to use open xml sdk2.0 for this purpose. so I am wondering if there is any class or any way that I could programmatically get to these built-in properties.

+4
source share
2 answers

An explanation of the following method can be found here , but pretty much you need to pass the properties that you want to get from the core.xml file for this method, and it will return a value:

public static string WDRetrieveCoreProperty(string docName, string propertyName) { // Given a document name and a core property, retrieve the value of the property. // Note that because this code uses the SelectSingleNode method, // the search is case sensitive. That is, looking for "Author" is not // the same as looking for "author". const string corePropertiesSchema = "http://schemas.openxmlformats.org/package/2006/metadata/core-properties"; const string dcPropertiesSchema = "http://purl.org/dc/elements/1.1/"; const string dcTermsPropertiesSchema = "http://purl.org/dc/terms/"; string propertyValue = string.Empty; using (WordprocessingDocument wdPackage = WordprocessingDocument.Open(docName, true)) { // Get the core properties part (core.xml). CoreFilePropertiesPart corePropertiesPart = wdPackage.CoreFilePropertiesPart; // Manage namespaces to perform XML XPath queries. NameTable nt = new NameTable(); XmlNamespaceManager nsManager = new XmlNamespaceManager(nt); nsManager.AddNamespace("cp", corePropertiesSchema); nsManager.AddNamespace("dc", dcPropertiesSchema); nsManager.AddNamespace("dcterms", dcTermsPropertiesSchema); // Get the properties from the package. XmlDocument xdoc = new XmlDocument(nt); // Load the XML in the part into an XmlDocument instance. xdoc.Load(corePropertiesPart.GetStream()); string searchString = string.Format("//cp:coreProperties/{0}", propertyName); XmlNode xNode = xdoc.SelectSingleNode(searchString, nsManager); if (!(xNode == null)) { propertyValue = xNode.InnerText; } } return propertyValue; } 
+8
source

You can also use the packaging API:

 using System.IO.Packaging.Package; [...] using (var package = Package.Open(path)) { package.PackageProperties.Creator = Environment.UserName; package.PackageProperties.LastModifiedBy = Environment.UserName; } 

This also works for other open XML formats, such as power point.

+1
source

All Articles