Изменение значения в операторе if - PullRequest
0 голосов
/ 20 октября 2018

Я пытаюсь перебрать столбец в числах и изменить цвет фона ячейки, если ячейка имеет определенный цвет фона.

repeat with i from 11 to the count of cells by 6

            if background color of cell i is {17990, 47031, 42919} then
                set background color of cell i to {65535, 0, 0}
            end if

end repeat

к сожалению, это ничего не делает.Сценарий просто останавливается без ошибок.Помогите пожалуйста!

Ответы [ 3 ]

0 голосов
/ 20 октября 2018

В приложении Numbers есть ошибка, из-за которой цвета не отображаются правильно.Я установил цвета фона столбцов A и B на выбранное вами значение {17990, 47031, 42919}, но когда я попросил скрипт вернуть цвета, он вернул значение {17990, 47030, 42919}.Из-за этого у меня был скрипт проверяет оба значения и действует соответственно.

Я добавил всплывающее диалоговое окно, в котором можно выбрать, в каком столбце изменить цвета ячейки.

tell application "Numbers"
    set ifColor to {17990, 47031, 42919}
    set ifColor2 to {17990, 47030, 42919}
    set changeToColor to {65535, 0, 0}
    tell its document 1
        set theColumns to name of columns of table "Table 1" of active sheet
        set chosenColumn to item 1 of (choose from list theColumns with title "Choose The Column" with prompt "Choose The Column")
        set cellCount to count of cells of column chosenColumn of table "Table 1" of active sheet
        repeat with i from 11 to cellCount by 6
            set thisCell to cell ((chosenColumn & i) as string) of table "Table 1" of active sheet
            if background color of thisCell is ifColor or background color of thisCell is ifColor2 then
                set background color of thisCell to changeToColor
            end if
        end repeat
    end tell
end tell

enter image description here

0 голосов
/ 21 октября 2018

@ wch1zpink: {17990, 47031, 42919} --> {17990, 47030, 42919}

Похоже на ошибку округления, возникающую при преобразовании целых чисел в числа с плавающей запятой и обратно.(AppleScript датируется днями QuickDraw, которые представляли значения RGB как UInt16, тогда как Numbers - это приложение Cocoa, а NSColor в Cocoa использует CGFloat.) Это неизбежно, поскольку является фундаментальным ограничением того, как процессоры выполняют математику (например,0.7 * 0.7 = 0.49 --> false!).

Решение состоит в том, чтобы проверить, равны ли числа в пределах допустимой погрешности:

on areRealsEqual(n1, n2, toleranceMargin)
  return n1 > n2 - toleranceMargin and n1 < n2 + toleranceMargin
end areRealsEqual

on areColorsEqual(c1, c2)
  repeat with i from 1 to length of c1
    if not areRealsEqual(item i of c1, item i of c2, 5) then return false
  end repeat
  return true
end areColorsEqual

set expectedColor to {17990, 47031, 42919}
set foundColor to {17990, 47030, 42919}

areColorsEqual(expectedColor, foundColor)
--> true
0 голосов
/ 20 октября 2018

Вот таблица, с которой я начал, закрасив фон пурпурным цветом одной ячейки, т.е. {65535,0,65535}.

Table 1 in Numbers on macOS before running code

Затем я запустил этот код:

use NumbersApp : application "Numbers"

property document : a reference to document 1 of NumbersApp
property sheet : a reference to active sheet of my document
property table : a reference to table 1 of my sheet


repeat with c in (a reference to every cell of my table)
    if c's background color = missing value then ¬
        set c's background color to {65535, 65535, 0}

    if c's background color = {65535, 0, 65535} then ¬
        set c's background color to {65535, 65535, 65535}
end repeat

Я ожидал, что большинство клеток станет желтым, а моя пурпурная клетка станет белой:

Table 1 in Numbers on macOS after running code

Хм ...

Моя пурпурная клетка все еще выглядит слишком пурпурной.Поэтому я решил проверить, насколько он действительно пурпурный:

return the background color of cell "C7" of my table
    --> {64587, 609, 65480}

Ну, это не то, что я установил, но довольно пурпурный, хотя теперь я понимаю, почему он не побелел.

Далее я решил проверить цвет фона одной из желтых ячеек, которые вы только что видели, программно превращая в очень специфический вид желтого:

return the background color of cell "D10" in my table
    --> {65534, 65531, 2689}

Опять же, это желтый, но не желтый, как я сказал.

Наконец, я использовал только что возвращенное значение цвета, чтобы попытаться нацелить эти ячейки и сделать их черными:

set the background color of every cell in my table ¬
    whose background color is {65534, 65531, 2689} ¬
    to {0, 0, 0}

Шиш.Они все еще очень солнечно желтые.

Заключение

Ошибка в AppleScript.Я отправил отчет об ошибке в Apple.Я предлагаю вам сделать то же самое.

...