1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
'SPSS AnswerNet: Result
'Solution ID: 100006377

'Заголовок:
'Убрать таблицы "Statistics", "Case Processing Summary", или Notes из результатов (Output)

'Описание:
'Вопрос.
'Мне хотелось бы убрать все таблицы "Statistics" и "Case Processing Summary"
'из окна результатов. Хочется, чтобы они не были просто скрыты, а удалены, причём вместе с
'таблицами "Notes". Есть ли способ сделать это через скрипт?

'Ответ.
'В стандартной поставке SPSS (директория SPSS\\Scripts) есть готовый скрипт "Clean Navigator.sbs",
'как раз предназначенный для того, чтобы можно было удалять объекты из окна результатов как по типу, так и по метке (названию таблицы).
'Вот как вы можете подредактировать этот скрипт для того, чтобы удалить все три вида таблиц
'из вашего Output. Для запуска скрипта используйте меню Utilities->Run Script, либо добавьте его
'меню или на панель инструментов для упрощения запуска.

'Единственное изменение требуется сделать в процедуре Sub Main, в которую добавить 2 строки сразу после
'строки
'Call SelectAndRemoveOutputItem(intType, strLabel) 'вызов процедуры ниже
'с указанными параметрами, но перед концом процедуры (End Sub). Строки надо добавить такие:

'Call SelectAndRemoveOutputItem(SPSSPivot, "Case Processing Summary")
'Call SelectAndRemoveOutputItem(SPSSPivot, "Statistics")

'Первый из трёх вызовов (Call) может быть пропущен (закомментирован), если вы хотите сохранить таблицы Notes.
'А можно наоборот добавить дополнительные метки или типы таблиц, подлежащих удалению.

'Отредактированная Sub Main приводится ниже для удобства.

Sub Main()
'Главная процедура задаёт параметры, определяющие, какие объекты должны быть удалены,
'а затем запускает процедуру SelectAndRemoveOutputItem, которая непосредственно удаляет указанное.

'Объявление переменных для помещения параметров

Dim intType As Integer 'Тип объекта-результата, целое число
Dim strLabel As String 'Метка объекта-результата, отображающаяся в левой стороне окна результатов, вOutput Navigator

intType = SPSSNote 'Тип (константа), который удаляем. См. помощь по свойству "SpssType" чтобы узнать, какие типы бывают
strLabel = "Notes" 'Таблицы с такой меткой удаляем

'********************************************************************
'Вы можете отредактировать строки кода, расположенные выше, чтобы удалять объекты других типов.
'Метки следует указывать с сохранением регистра (то есть "Case Processing Summary"
'это не то же, что "case processing summary")

'For example, to delete all Case Processing Summaries, specify:
'intType = SpssPivot
'strLabel = "Case Processing Summary"
'*********************************************************************

'Call SelectAndRemoveOutputItem(intType, strLabel) 'вызов процедуры с конкретными параметрами - ниже
Call SelectAndRemoveOutputItem(SPSSPivot, "Case Processing Summary")
Call SelectAndRemoveOutputItem(SPSSPivot, "Statistics")


End Sub

Sub SelectAndRemoveOutputItem(intType As Integer, Optional strLabel As Variant)
 'Эта процедура пробегает через всё окно результатов и удаляет те объекты,
 'которые удовлетворяют указанному типу и метке.

    'Variable declarations

	Dim objOutputDoc As ISpssOutputDoc
	Dim objItems As ISpssItems
	Dim objItem As ISpssItem
	 'По соглашению, имена объектных переменных начинаются с "obj".
	 'OutputDoc, ISpssItems, и ISpssItem - имена объектных классов SPSS.
	 'Например, первая строка из трёх, расположенных выше, объявляет объектную переменную с именем
	 '"objOutputDoc" и относит её к объектному классу OutputDoc.
	 'Ниже этой переменной будет сопоставлен документ (окно) выдачи результатов, output
	 'для того, чтобы получить доступ к содержащимся там объектам.

	Dim intCount As Integer				'общее число объектов в окне
    Dim intIndex As Integer				'счётчик цикла, обозначает номер (позицию) каждого объекта
    Dim intCurrentType As Integer		'тип текущего объекта
    Dim strCurrentLabel As String		'метка текущего объекта

    Set objOutputDoc = objSpssApp.GetDesignatedOutputDoc
	Set objItems = objOutputDoc.Items
	 'GetDesignatedOutputDoc - это метод, возвращающий активное окно выдачи результатов.
	 'После него переменной objOutputDoc оказывается сопоставлен активное окно Output.
	 'Метод Items используется для доступа к объектам в этом окне.

	intCount = objItems.Count 	'Метод Count возвращает число
						 		'объектов в активном окне

    objOutputDoc.ClearSelection			'Снимаем выделение, чтобы случайно не удалить те
    									'объекты, которые оказались выделенными перед запуском скрипта

	For intIndex = 0 To intCount - 1
	 'Цикл повторяется столько раз, сколько есть объектов в окне результатов.
	 'Переменная intIndex используется как счётчик. intCount - общее число объектов.
	 'Объекты пронумерованы по порядку, начиная с 0. Поэтому 9-й объект, например, будет
	 'иметь индекс 8.

		Set objItem = objItems.GetItem(intIndex)
        'Берём объект, чей индекс соответствует текущему значению счётчика.

        intCurrentType = objItem.SPSSType		'Возвращаем тип текущего объекта
        objItem.Current = True

		 'Первое условие ниже проверяет, соответстует ли тип объекта тому, что следует удалять.
		 'Если да, проверяем также метку. Если и метка соответствует (или её нет), выделяем объект.

        If intCurrentType = intType Then
            strCurrentLabel = objItem.Label
            If strCurrentLabel = strLabel Or strLabel = "" Then
                objItem.Selected = True
             End If
        End If
    Next

	objOutputDoc.Remove		'Удаляем все объекты, выделенные по ходу выполнения цикла FOR... NEXT выше.

End Sub