As I mentioned last time, some production users spend a lot of time editing and formatting the text in the Viewer outline and object titles. This was a surprise, but I suppose it shouldn't have been. If the Viewer contents are to be read as a document – whether in native format or as exported to PDF or other formats, these items are important.

{C}We think about tables and charts so much that it is easy to forget the outline and titles. So I created the extension command SPSSINC MODIFY OUTPUT for Version 17 to simplify automating this task. It comes with a dialog box interface that appears on the Utilities menu. The command lets you do these kinds of things


  • Select the items to operate on by their type (headings, titles, etc) or OMS subtype (tables) and the text of the outline or item title
  • Change the text, incorporating the old text or replacing it
  • Apply html or rtf formatting (right-hand pane only, not all object types)
  • Sequence number the items using numbers, letters, or roman numerals
  • Hide selected items
  • Insert page breaks
  • Apply a custom Python function to selected items.

The goal of this command and SPSSINC MODIFY TABLES and TEXT is to clean up the output and make it into a presentation document in an automated way without forcing you off to Excel or another application to do this.

Titles and headings can be plain text or well-formed simple html or rtf.

The dialog box for this command looks like this.


This dialog generates the SPSSINC MODIFY OUTPUT COMMAND

It's not the most beautiful dialog I've ever built, but it was done pretty easily with the Custom Dialog Builder and offers most of the functionality available in syntax. When you select the objects based on their text, the text can be selected by literal equality, its start, its end, or by a regular expression. The replacement text can include that, possibly with the addition of formatting, or it can replace it, and it can position a sequence number. For example, the following replacement text might be used.


"<html>\\0: <i>\\1</i></html>"


What does that mean? The html directives say to make "\\1", whatever that is, italic and to put "\\0" in front of it as plain text. \\1 stands for the original text of item. In this example we are also numbering the items, and \\0 refers to the current sequence number. If the original title is "Means", this specification might produce


The command made the text italic and prefixed a sequence number

In this case I chose upper case roman numerals for the sequence number style. I could have chosen lower case roman numerals, upper- or lower-case letters, or just numbers.

The details of what you can do with various kinds of output objects can be found in the dialog box help. A little experimentation will go a long way, too.

If you are working interactively, it's probably not worth the trouble to use this command. You can do most of these actions interactively, but if you are building production jobs, automation is critical, and this command can help to eliminate the drudgery and error-prone editing that might otherwise have to be done by hand.

Since all these changes take place downstream from the output seen by OMS (the Output Management System), any OMS captures will not reflect them even with PDF and the other document formats now available with OMS. But now that we have the OUTPUT EXPORT command, you can create your output, apply the formatting and hiding actions available with this set of commands, and then use OUTPUT EXPORT to export the visible items to PDF and other formats.

Implementing this feature makes heavy use of the extension command mechanism begun in Version 16, and these features from Version 17: the integration of Python programmability and Python scripting, and the Custom Dialog Builder. MODIFY TABLES and MODIFY OUTPUT were not the easiest features to create, but using them can save you a lot of work and eliminate a large percentage of the situations where you needed to write a script.

You can download this extension command, with dialog box interface, from Developer Central. It needs the Python Plug In and at least Version 17.

Leave a Reply