'Код решения: 100007757 'Тема: 'Установка нужного числа знаков после запятой во всех ячейках таблицы, либо в определённом столбце. 'Описание: 'Вопрос. 'Используемая версия SPSS: 7.5 или выше. 'Мне довольно часто требуется менять число десятичных знаков в таблицах. 'Например, требуется отображение 5 знаков после запятой для всех ячеек. 'А для некоторых показателей я хотел бы видеть ещё больше знаков, например, 9 знаков для уровня значимости. 'Можно ли как-то автоматизировать эти действия, чтобы не менять каждый раз формат вручную? 'Ответ. 'Да. Ниже приводится скрипт, который делает нужные вам настройки для первой выделенной мобильной таблицы. 'Процедуру Sub Main вы можете заменить, или вовсе заменить своей, но процедуры SetDecimalDigits и SetDecimalDigitsInColumn, 'а также функция FindColumnLabel, вероятно, не потребуют изменений, вне зависимости от того, захотите ли вы 'включить их в свой собственный скрипт, или в файл с автоскриптами, например. 'Чтобы посмотреть, как это работает: откройте новое окно скриптов, 'удалите всё его содержимое, и вставьте туда все, что находится ниже, после чего 'сохраните это как файл SetDecimals.sbs и запустите. 'Begin Description 'Процедура SetDecimalDigits меняет число отображаемых знаков после запятой во всех ячейках. 'Процедура SetDecimalDigitsInColumn воздействует лишь на определённый столбец. 'Функция FindColumnLabel ищет этот определённый столбец по его метке; 'она возвращает индекс (номер) столбца, либо -1, если столбца с такой меткой не было найдено. 'End Description '--------------------------------------------------------------------------- ' Демонстрация того, как можно организовать вызов процедур SetDecimalDigits и SetDecimalDigitsInColumn. '--------------------------------------------------------------------------- Sub Main Dim objPivot As PivotTable Dim objItem As ISpssItem 'ищем и активируем первую выделенную мобильную таблицу GetFirstSelectedPivot objPivot, objItem, True, True 'отложим перерисовку экрана до завершения преобразований objPivot.UpdateScreen = False '*********************************************************************** 'установим для всех ячеек десятичнй формат с 5 знаками после запятой SetDecimalDigits objPivot, 5 '*********************************************************************** '*********************************************************************** 'для ячеек в колонке с меткой "Sig." формат установим с 9 знаками после запятой SetDecimalDigitsInColumn objPivot, 9, FindColumnLabel(objPivot, "Sig.") '*********************************************************************** 'разрешаем перерисовку экрана objPivot.UpdateScreen = True 'деактивируем таблицу objItem.Deactivate 'ещё раз выполняем активацию/деактивацию таблицы - иногда это позволяет избежать 'проблем с перерисовкой таблицы по ширине или высоте objItem.ActivateTable objItem.Deactivate End Sub '--------------------------------------------------------------------------- '--------------------------------------------------------------------------- 'Изменяет число отображаемых знаков после десятичной точки для ВСЕХ ячеек в мобильной таблице '--------------------------------------------------------------------------- Sub SetDecimalDigits(objPivot As PivotTable, intDigits As Integer) Dim lngRow As Long, lngCol As Long Dim objDataCells As ISpssDataCells Set objDataCells = objPivot.DataCellArray With objDataCells For lngRow = 0 To .NumRows - 1 For lngCol = 0 To .NumColumns - 1 If Not IsNull (.ValueAt (lngRow, lngCol)) Then .HDecDigitsAt (lngRow, lngCol) = intDigits End If Next Next End With objPivot.Autofit End Sub '--------------------------------------------------------------------------- '--------------------------------------------------------------------------- 'Изменяет число отображаемых знаков после десятичной точки для ячеек определённого столбца. '(использует функцию FindColumnLabel для поиска нужного столбца) '--------------------------------------------------------------------------- Sub SetDecimalDigitsInColumn(objPivot As PivotTable, intDigits As Integer, lngColumn As Long) Dim lngRow As Long Dim objDataCells As ISpssDataCells Set objDataCells = objPivot.DataCellArray With objDataCells If lngColumn >= 0 And lngColumn < .NumColumns Then For lngRow = 0 To .NumRows - 1 If Not IsNull (.ValueAt (lngRow, lngColumn)) Then .HDecDigitsAt (lngRow, lngColumn) = intDigits End If Next Else 'нужный столбец не найден Exit Sub End If End With objPivot.Autofit End Sub '--------------------------------------------------------------------------- 'Возвращает индекс ПЕРВОГО столбца, чья метка содержит заданную строку. 'Возвращает -1, если такой столбец не был найден. '--------------------------------------------------------------------------- Function FindColumnLabel (objPivot As PivotTable, strText As String) As Long Dim objColLabels As ISpssLabels ' массив меток столбцов. Dim lngR As Long ' счетчик цикла Dim lngC As Long ' счетчик цикла If objPivot Is Nothing Then Debug.Print "PivotTable is Nothing!" Exit Function End If Set objColLabels = objPivot.ColumnLabelArray ' ColLabelArray есть двумерный массив. Осуществляем пробежку по его элементам в поисках совпадения подстроки (strText) 'функция вернёт -1, если метка не будет найдена FindColumnLabel = -1 For lngC = 0 To objColLabels.NumColumns - 1 For lngR = 0 To objColLabels.NumRows - 1 If InStr(objColLabels.ValueAt(lngR,lngC), strText) Then FindColumnLabel = lngC Exit Function End If Next Next End Function '---------------------------------------------------------------------------