Доступ к ячейкам со смещением в Numbers with Applescript

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

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

Я искал везде, но в Numbers Applescript, похоже, нет команды "смещения", хотя это очень удобно.

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

2 ответа

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

Если вам нужно имитировать выражение 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 - значение смещения ячейки.

Поместите 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 - Номер документа или название.

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

Изменить: Спасибо user3439894 за указание на проблемы с моим первым ответом - это было совершенно неправильно, основанный на Excel вместо чисел.

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

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
Другие вопросы по тегам