Доступ к ячейкам со смещением в Numbers with Applescript - PullRequest
0 голосов
/ 15 октября 2018

Как я могу ссылаться на ячейку относительно другой ячейки в Applescript, как в Excel VBA?В Excel VBA я мог использовать «смещение», чтобы установить значение ячейки D2:

Range("A1").Offset(1,3).Value = "Example"

Я искал везде, но в Numbers Applescript, похоже, нет команды «смещения», хотя это таксупер удобный.

Любая помощь очень ценится!

Ответы [ 2 ]

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

В дополнение к отличному ответу Дэвида ...

Если вам нужно подражать выражению VBA, пример кода из ответа Дэвида можно свернуть в обработчик , какв приведенном ниже примере.

on setCellOffsetValue(cl, co, ro, val)
    tell application "Numbers"
        tell table 1 of sheet 1 of document 1
            set c to cell cl's column's address as number
            set r to cell cl's row's address as number
            set value of cell (c + co) of row (r + ro) to val
        end tell
    end tell
end setCellOffsetValue

Теперь вы можете использовать его несколько раз в одном и том же скрипте, вызывая его, например:

setCellOffsetValue("A1", 3, 1, "Example")

Как вы можете видеть в этой версии, setCellOffsetValue обработчик принимает четыре параметра :

  • cl - ячейка для смещения.
  • co - столбецсмещение от ячейки.
  • ro - смещение строки от ячейки).
  • val - значение смещения ячейки.

Placeобработчик setCellOffsetValue в вашем скрипте и вызовите его при необходимости.


Обработчик выше имеет table, sheet и document жестко закодировано, каждый на 1.Однако в этом примере вы также передаете эту информацию обработчику :

on setCellOffsetValue(cl, co, ro, val, t, s, d)
    tell application "Numbers"
        tell table t of sheet s of document d
            set c to cell cl's column's address as number
            set r to cell cl's row's address as number
            set value of cell (c + co) of row (r + ro) to val
        end tell
    end tell
end setCellOffsetValue

Теперь вы можете использовать ее несколько раз в одном и том же сценарии, вызывая ее, например:

setCellOffsetValue("A1", 3, 1, "Example", 1, 1, 1)

Или:

setCellOffsetValue("A1", 3, 1, "Example", "Table 1", "Sheet 1", "Untitled")

Последние три параметра могут быть либо числовым значением , либо именным значением , в зависимости от ситуациидля потребности в данный момент.

Эта версия будет полезна для документов , которые имеют несколько таблиц и или листов и необходимость целевогозатем table 1 of sheet 1 of document 1.

Как вы можете видеть в этой версии, обработчик setCellOffsetValue принимает семь параметров :

  • cl - ячейка для смещения.
  • co - смещение столбца от ячейки.
  • ro - смещение строки от ячейки).
  • val - значение ячейки смещения.
  • t - номер или имя таблицы.
  • s - номер или имя листа.
  • d - Номер документа or name.

Примечание. Пример кода AppleScript является именно таким и не содержит обработки ошибок, которая может потребоваться.Пользователь должен добавить любую обработку ошибок, которая может быть уместной, необходимой или требуемой.Взгляните на оператор try и error оператор в AppleScript Language Guide .См. Также Работа с ошибками .

0 голосов
/ 18 ноября 2018

Редактировать: Спасибо пользователю3439894 за то, что он указал на проблемы с моим первым ответом - это было совершенно неправильно, основано на Excel вместо чисел.

Вот полный пример сценария, показывающий один метод для достижения цели вЧисла:

tell application "Numbers"
    tell table 1 of sheet 1 of document 1
        set c to cell "A1"'s column's address as number
        set r to cell "A1"'s row's address as number
        set value of cell (c + 3) of row (r + 1) to "Example"
    end tell
end tell

Вы можете сжать команду set в одну строку, например:

tell application "Numbers"
    tell table 1 of sheet 1 of document 1
        set value of cell ((cell "A1"'s column's address as number) + 3) of row ((cell "A1"'s row's address as number) + 1) to "Example"
    end tell
end tell
...