* Alternative to http://www.spsstools.net/Scripts/OutputDoc/ReplaceLeftPanePageTitleByContentOfRightPaneTitle.sbs. * The script should be applied to generated Output with some Page Titles inserted (see Insert...New Page Title menu or TITLE syntax command. After this script run you should see Page Titles in the Outline (left pane of the Output window) are changed to the actual Page Title contents. * This could be used with a user-defined menu button, or with an INSERT at the end of a long (set of) syntaxes. * Much easier to navigate the output this way!. *** This macro call is just to insert some titles for illustration. define !demo () !do !year = 1999 !to 2015 title !quote(!concat("** Year: ", !year)). !doend. !enddefine. !demo. *** And this is the script itself. begin program. # -*- coding: utf-8 -*- ############################################################################### # Title: Replace 'Page Title' of TITLE commands in SPSS with actual title. # Author: Albert-Jan Roskam # Date: 2014-01-21 # Note: This is entirely aesthetical, but it enhances readability of the output. ############################################################################### import tempfile, os, sys, io import spss, SpssClient def _get_encoding(): """Returns the encoding of the syntax file (utf-8 if unicode mode, ansi if codepage mode (e.g. 1252)""" spsslocale, utf8mode = map(spss.GetSetting, ["locale", "unicode"]) codepage = spsslocale.split(".")[-1] return "utf-8" if utf8mode == "Yes" else codepage def _titleToPane(): """See titleToPane(). This function does the actual job""" outputDoc = SpssClient.GetDesignatedOutputDoc() outputItemList = outputDoc.GetOutputItems() textFormat = SpssClient.DocExportFormat.SpssFormatText filename = tempfile.mktemp() + ".txt" for index in range(outputItemList.Size()): outputItem = outputItemList.GetItemAt(index) if outputItem.GetDescription() == u"Page Title": #This should be changed in case your Output localized. #Say, for Russian localization this would be #if outputItem.GetDescription() == u"Заголовок страницы": outputItem.ExportToDocument(filename, textFormat) with io.open(filename, encoding=_get_encoding()) as f: # alas, must write to an actual file outputItem.SetDescription(f.read().rstrip()) os.remove(filename) return outputDoc def titleToPane(spv=None): """Copy the contents of the TITLE command of the designated output document to the left output viewer pane. This script could be called outside SPSS as well. That is why there is an optional argument of .spv document name to process. If no argument provided the current designated output is processed. """ try: outputDoc = None SpssClient.StartClient() if spv: SpssClient.OpenOutputDoc(spv) outputDoc = _titleToPane() if spv and outputDoc: outputDoc.SaveAs(spv) except: print "ERROR filling TITLE in Output Viewer [%s]" % sys.exc_info()[1] finally: try: SpssClient.Exit() except WindowsError: pass SpssClient.StopClient() if __name__ == "__main__": titleToPane() end program.