Доступ к ячейкам со смещением в 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