'Код решения: 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