Blog - Title

Programmatically Limiting Styles in Word

Programmatically Limiting Styles in Word

  • Comments 2

Authoring in Word makes publishing systems very user friendly.  After the user authors his or her paper, you can transform Open XML WordprocessingML to the desired output format.  Some publishing systems use an approach of limiting the paragraph and character styles that the author can use.  This can help in writing a more deterministic transform to the output format.  Alternatively, you can provide a resilient transform that implements some reasonable approach for handling user-defined styles, but this may lead to confusion on the part of the author if the behavior was not what was expected.  But if you decide to limit styles, there are (at least) three approachs:

This blog is inactive.
New blog: EricWhite.com/blog

Blog TOC
The following VBA macro limits styles to a set of four possible styles, and locks the document so that authors can use only those four styles in a document:

Dim cnt As Integer
For Each Style In ActiveDocument.Styles
    Style.Locked = True
Next

ActiveDocument.Styles("Heading 1").Locked = False
ActiveDocument.Styles("Heading 2").Locked = False
ActiveDocument.Styles("Normal (Web)").Locked = False
ActiveDocument.Styles("Title").Locked = False
ActiveDocument.Protect Password:="password", NoReset:=False, Type:= _
    wdNoProtection, UseIRM:=False, EnforceStyleLock:=True

You can write managed add-in code to do the same thing:

Word.Document currentDocument = doc;
foreach (Word.Style style in doc.Styles)
{
    if (style.NameLocal == "Heading 1" ||
        style.NameLocal == "Heading 2" ||
        style.NameLocal == "Title" ||
        style.NameLocal == "Normal")
        style.Locked = false;
    else
        style.Locked = true;
}
object noReset = (object)false;
object password = (object)"password";
object useIrm = (object)false;
object enforceStyleLock = (object)true;
currentDocument.Protect(Microsoft.Office.Interop.Word.WdProtectionType.wdNoProtection,
    ref noReset, ref password, ref useIrm, ref enforceStyleLock);

Another approach is to directly modify documents using the Open XML SDK to limit styles.

To modify a document, limiting its styles, you need to set the w:documentProtection element in the Settings part.  In the Styles part, you update the w:defLockedState attribute of the w:latentStyles element, and the w:locked attribute of appropriate w:lsdException elements.

Leave a Comment
  • Please add 7 and 6 and type the answer here:
  • Post
  • Very interesting.

    How would you handle limiting the font available to the user. Is there a way to do this through word or even better directly within the open xml document ?

    Hi, FIF, I don't believe that there is any way to limit fonts.

    -Eric

  • Just the thing I've been waiting to pour over. Thanks very much for the detail, the explanations, and the effort!

Page 1 of 1 (2 items)