SliverNinja answer above is correct. I forgot that you should have added to the collection until I ported the old VB code. I had to set and read a bunch of doc properties, so here are a few extension methods for reading / writing from either inline documents or from CustomDocumentProperties in Word. This is NetOffice code, but you can convert it to VSTO just by changing the operators used.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using NetOffice.OfficeApi; using NetOffice.OfficeApi.Enums; using NetOffice.WordApi; namespace PalabraAddin { public static class ExtDocument { public static T GetCustomProperty<T>(this Document doc, string name, T defaultValue) { return doc.GetProperty(doc.CustomDocumentProperties, name, defaultValue); } public static T GetBuiltInProperty<T>(this Document doc, string name, T defaultValue) { return doc.GetProperty(doc.BuiltInDocumentProperties, name, defaultValue); } public static T SetCustomProperty<T>(this Document doc, string name, T value) { return doc.SetProperty(doc.CustomDocumentProperties, name, value); } public static T SetBuiltInProperty<T>(this Document doc, string name, T value) { return doc.SetProperty(doc.BuiltInDocumentProperties, name, value); } public static T GetProperty<T>(this Document doc, object collection, string name, T defaultValue) { var properties = (DocumentProperties) collection; foreach (var prop in properties.Where(prop => prop.Name == name)) return (T) prop.Value; return defaultValue; } public static T SetProperty<T>(this Document doc, object collection, string name, T value) { var properties = (DocumentProperties) collection; foreach (var prop in properties.Where(prop => prop.Name == name)) { if (!((T) prop.Value).Equals(value)) prop.Value = value; return value; } MsoDocProperties propType; if (value is Boolean) propType = MsoDocProperties.msoPropertyTypeBoolean; else if (value is DateTime) propType = MsoDocProperties.msoPropertyTypeDate; else if (value is double || value is Single) propType = MsoDocProperties.msoPropertyTypeFloat; else if (value is int) propType = MsoDocProperties.msoPropertyTypeNumber; else propType = MsoDocProperties.msoPropertyTypeString; properties.Add(name, false, propType, value); return value; } } }
source share