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>();

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

        // open the specified document
        WordApp.Documents.Open(file);

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

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

    // 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