You can generate project report using a custom Word template. In order to make a proper Word template, you should have a Microsoft Windows machine with Microsoft Word 2010 or more. Please note, that older Microsoft Word versions or Microsoft Word for Mac OS are not suitable for creating custom templates.

First of all, you need to enable the Developer tab in Word - you will need it for inserting variables and lists into the template. Please refer to Microsoft Office documentation on how to do this. After that tab is enabled, switch to it and enable the Design Mode. You need this mode to make all lists and variables visible.

There are 2 ways to insert data into the template:

Text Variables

Simple global variables insert some static data into the report. All variables look like a usual text within curly brackets (for example, {variable_name}). The following variables are supported:

Content Control

Content control blocks are responsible for inserting lists and variables into the report. You can insert content control blocks by pressing the Rich Text Content Control button in the Developer tab.

Rich Text Content Control

After the content control is inserted into the template, you should press the Properties button to edit its properties. The title of the content control doesn't affect anything - you can put there anything you want, so you can easily know what that control does. The system uses the field named Tag.

Properties

There are 4 different types of control tags which you can use in your templates:


List of Available Objects, Variables and Lists


Scopes Explanation

Scopes mechanism comes into action when you use object lists. For example, when you use some variables within a category list, your current scope will be tied to a category from that list. So, if you use a variable named name without any explicit scope specification inside that block, the system will know that it needs to insert there the name of a particular category from that list.

Then, for example, within that category block you need to have a list of controls. And inside the control block you use a variable named name without scope specification. In this case the system will get the value from the particular control, because control is the current variable scope.

If you have multiple nested lists, you can access to variables of the upper level lists by specifying the scope modififer. For example, you have 3 nested lists: targetscategorieschecks. You can access target's variables from the check or category block by specifying the scope, for example: var:target.host (target here is the desired variable scope).

The default scope for the report is a project object. In other words, when you use a variable without a scope specified and which is not inside any lists, it will get its value from the project object.