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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
'Код решения: 100006382 от 24.05.1999.
'Продукт: SPSS Base
'Версия: 8.0
'ОС: WINDOWS
'Тип вопроса: синтаксис, командный режим, скрипты

'Тема:
'Как через скрипт разгруппировать колонку в мобильной таблице (например, "Valid" в таблице "Frequencies")

'Описание:
'Вопрос.
'Я использую SPSS версии 8.0 для Windows. Мне не нужно, чтобы в частотных таблицах отображалась колонка "Valid".
'Фактически, "Valid" - это метка группы строк. Есть ли возможность через скрипт убрать эту группировку?

'Ответ.
'Предложенная ниже процедура UnGroupRows ведёт поиск заданной текстовой строки (например, "Valid")
'в метках строк. Другая - UnGroupColumns - ведёт аналогичный поиск в метках столбцов. Как только
'такая строка находится, скрипт выделяет её и снимает группировку (т.е. схема такая же, ка это бы делал пользователь вручную).

'Для того, чтобы эти процедуры вызывались всякий раз при построении таблицы Frequencies, следует поместить их в файле автоскриптов
'и соответственно его модифицировать:
'1. Вставьте целиком процедуры UnGroupRows и/или UnGroupColumns в файле Autoscript.sbs file (в самый конец).
'2. Найдите в окне результатов таблицу Frequencies, щёлкните правой кнопкой мыши, выберите Create/Edit Autoscript
'из контекстного меню.
'3. В процедуру, куда после этого выбора будет помещен ваш курсор, добавьте следующие строки:

'Dim objPivot As PivotTable
'Set objPivot = objTable
'UnGroupRows objPivot, "Valid"

'Проверьте вкладку Script в меню Edit->Options, что там стоит галочка против названия
'отредактированной вами процедуры (вероятнее всего, Frequencies_Table_Frequencies_Create).

'Перевод: А. Балабанов, 13.01.2009.
'Проверено: SPSS 13.0.
'Размещение: http://www.spsstools.ru/Scripts/PivotTables/UngroupAColumnInAPivotTable.txt (.sbs).
'См. также аналогичное решение: http://www.spsstools.ru/Scripts/PivotTables/HideValidAndValidPcInFrequencyTable.txt (.sbs).

'Вот как может выглядеть модифицированная процедура в файле автоскрипта:
'(основное содержимое процедуры не имеет отношения к данному решению - примеч. перев.)
'_______________________________________________________

Sub Frequencies_Table_Frequencies_Create(objTable As Object, _ 
objOutputDoc As Object, lngIndex As Long) 
'Процедура автоскрипта
'Пускающее событие: создание таблицы "Frequencies" при выполнении команды "Frequencies"

'Действия: проходит по меткам строк, находит метку "Total", и выделяет её
'и соответствующие ей ячейки данных жирным шрифтом.
Dim bolSelection As Boolean 

Call SelectRowLabelsAndData(objTable, cTOTAL, bolSelection) 
If bolSelection = True Then 
objTable.TextStyle = 2 'выделить текст полужирным
End If 

'--- собственно, эта часть добавлена вами для разгруппировки группы строк с меткой "Valid"
Dim objPivot As PivotTable 
Set objPivot = objTable 
UnGroupRows objPivot, "Valid" 
End Sub 

'_______________________________________________________

'Итак, если вы хотите использовать автоскрипты, то вставлять в файл вам нужно процедуры, которые расположены ниже
' (см. комментарии). Процедуру Main вставлять в автоскрипт не надо, она приводится лишь для демонстрации работы
'процедур UnGroupRows и UnGroupColumns.
'_______________________________________________________

'***** Демонстрация работы процедур UnGroupRows и UnGroupColumns *****
'--- Сохраните всё, что расположено ниже, в файл "Ungroup.SBS"
' Выделите нужную мобильную таблицу и запустите скрипт Ungroup.SBS
'***** Не копируйте процедуру Sub Main в автоскрипт! См. указания ниже. *****

Sub Main 
Dim objPivot As PivotTable 
Dim objItem As ISpssItem 

Dim bolFoundOutput As Boolean, bolFoundPivot As Boolean 

GetFirstSelectedPivot objPivot, objItem, bolFoundOutput, bolFoundPivot 
If Not (bolFoundOutput And bolFoundPivot) Then 
Exit Sub 
End If 

UnGroupRows objPivot, "Valid" 

objItem.Deactivate 
End Sub 

'************************************************************** 
'Для использования процедур в автоскрипте:
'Выберите пункт контекстного меню Create/Edit Autoscript в таблице Frequencies.
'Вставьте вызов процедур UnGroupRows и/или UnGroupColumns в соответствующую процедуру, как показано выше.
'Вставьте в файл Autoscript.sbs (в конец файла) сами процедуры UnGroupRows и/или UnGroupColumns
'************************************************************** 

Sub UnGroupRows(objPivot As PivotTable, strLabel As String) 
Dim objRowLabels As ISpssLabels 
Dim i As Integer, j As Integer 

Set objRowLabels = objPivot.RowLabelArray 
With objRowLabels 
For i = .NumRows - 1 To 0 Step -1 
For j = 0 To .NumColumns - 1 
If Not IsNull(.ValueAt(i,j)) Then 
If .ValueAt(i,j) = strLabel Then 
objPivot.UpdateScreen = False 
.SelectLabelAt(i,j)
objPivot.Ungroup 
objPivot.UpdateScreen = True 
Exit Sub 
End If 
End If 
Next 
Next 
End With 
End Sub 

Sub UnGroupColumns(objPivot As PivotTable, strLabel As String) 
Dim objColumnLabels As ISpssLabels 
Dim i As Integer, j As Integer 

Set objColumnLabels = objPivot.ColumnLabelArray 
With objColumnLabels 
For i = .NumRows - 1 To 0 Step -1 
For j = 0 To .NumColumns - 1 
If Not IsNull(.ValueAt(i,j)) Then 
If .ValueAt(i,j) = strLabel Then 
objPivot.UpdateScreen = False 
.SelectLabelAt(i,j) 
objPivot.Ungroup 
objPivot.UpdateScreen = True 
Exit Sub 
End If 
End If 
Next 
Next 
End With 
End Sub