I’ve been toying around with some document generation lately and thought I’d share a bit of what I’ve learned. Here’s a method for extracting a list of custom properties in use in the document:

/// <summary>
/// Retrieves custom properties from a given Word document
/// </summary>
/// <param name="file">Full path to the Word document</param>
/// <returns>A dictionary representation of the document's custom properties</returns>
public static Dictionary<string, string> GetDocProperties(string file)
    Application WordApp = null;
    var DocProperties = new Dictionary<string, string>();

        // spin up a new WinWord.exe
        WordApp = new Application();

        // open the specified document

        // grab the custom properties container
        dynamic CustomProps = WordApp.ActiveDocument.CustomDocumentProperties;

        // extract each property
        foreach (var Prop in CustomProps)
            DocProperties.Add(Prop.Name, Prop.Value);
        // close doc and shutdown word
        if (WordApp != null)
            if (WordApp.ActiveDocument != null)

    // return properties
    return DocProperties;

This is so much easier and cleaner with .NET4’s new dynamic capabilities and how nice it plays with COM. To use this, add the following references to your project:

  • Microsoft.Office.Interop.Word, v12
  • Office, v12