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
'Процедура UndoSciNotation (стандартная процедура, которая присутствует в файле Global.sbs под именем UndoScientificNotation).
'Назначение: заменяет "научный формат" (типа 1.23E+06) в ячейкам мобильных таблиц.
'Условия: мобильная таблица, в которую следует внести изменения, активирована, переменная strNewFormat содержит новый корректный формат.
'Действия: изменяет формат ячеек с "научного" на тот, который указан в переменной strNewFormat.
'Входные: активированная мобильная таблица (объектная переменная) и новый числовой формат в строковой переменной strNewFormat.
'Выходные: изменённая мобильная таблица.

'См. справку по объектам SPSS, тема "String Description of Numeric Formats" (строковое представление числовых форматов),
'либо непосредственно поэкспериментируйте со свойством NumericFormatAt.

'Перевод: А. Балабанов, 14.01.2009.
'Проверено: SPSS 15.0.0.
'Размещение: http://www.spsstools.ru/Scripts/PivotTables/UndoSciNotation.txt (.sbs).


Sub Main
	'добавлено перев. для демонстрации работы. Модифицирует первую выделенную таблицу - А.Б.
	Dim objSelectedPivot As Object
	Dim objItem As ISpssItem
	Dim bolFoundOutput As Boolean
	Dim bolFoundPivot As Boolean
	Call GetFirstSelectedPivot(objSelectedPivot, objItem, bolFoundOutput, bolFoundPivot)
	If bolFoundPivot Then Call UndoSciNotation(objSelectedPivot,"#.#")
End Sub

Sub UndoSciNotation(objPivotTable As Object, strNewFormat As String)
        Dim strFormat As String
        Dim lngRow As Long, lngCol As Long
        Dim objDataCells As ISpssDataCells

        Set objDataCells = objPivotTable.DataCellArray

        'попытка установки процентного формата вызывает численную ошибку!
        If strNewFormat = "##.#%" Then
                Exit Sub
        End If

        With objDataCells
                For lngRow = 0 To .NumRows - 1
                        For lngCol = 0 To .NumColumns - 1
                                If Not IsNull (.ValueAt (lngRow, lngCol))Then
                                        strFormat = .NumericFormatAt(lngRow, lngCol)
                                        If strFormat = "#.# ; #.##E-#" Or strFormat = "#.##E+##" Then
                                                .NumericFormatAt (lngRow,lngCol) = strNewFormat
                                        End If
                                End If
                        Next
                Next
        End With

        objPivotTable.Autofit

End Sub