Как перебрать выделенные ячейки в Excel с помощью Applescript?
В VBA я могу сделать что-то вроде этого, чтобы пройтись по выбранным ячейкам в Excel:
for each c in Selection
' do things
next
Я пытаюсь сделать то же самое в AppleScript, но я, кажется, никуда не денусь. Я получаю текущую ячейку, но даже когда я делаю
set c to count of selection
В результате c устанавливается на 0.
Руководство по использованию appleScriptcript, похоже, не помогает и не ищет Google.
Спасибо
3 ответа
Оказывается, вы должны использовать "count count", чтобы получить количество ячеек в выделении. Как только вы попали туда, это просто - вот так:
tell application "Microsoft Excel"
repeat with j from 1 to count large of selection
-- do stuff with the cell
set value of cell j of selection to "cell_" & j
end repeat
end tell
Для того, чтобы туда добраться, мне пришлось сделать
tell application "Microsoft Excel"
set c to properties of selection
end tell
return c
и затем просмотрите список свойств, пока я не нашел перспективный. Это был хороший способ попасть в список недвижимости. Может быть, есть более быстрый способ в редакторе AppleScript, но я человек командной строки.
Вы можете попробовать что-то вроде этого:
tell application "Microsoft Excel"
set range1 to range "A1:A5"
set value of range1 to {{1.0}, {2.0}, {3.0}, {4.0}, {5.0}}
set range2 to range "B1:B5"
set value of range2 to {3}
repeat with i from 1 to 5
set formula of row i of column 3 to "=A" & i & "+B" & i
end repeat
end tell
Вы можете прочитать больше здесь
Вы также можете попробовать:
set cellCount to count of (cells of selection)
Это, очевидно, старый вопрос, но я думаю, что он хороший, и в одном из комментариев поднимается вопрос о сложном выборе. Итак, вот несколько способов, которыми вы можете подойти к этому с Mac Excel (2011 в моем случае). Обработки ошибок нет, но внизу есть скрипт, который предварительно заполнит рабочий лист для демонстрационных целей. В зависимости от того, насколько велик ваш выбор, он может вылететь.
Во-первых, вы можете сделать очень простую вещь: подсчитать выбранные ячейки. Это должно работать как с простыми, так и со сложными выделениями.
tell application "Microsoft Excel" to count of cells of selection
Выбор одной области
Во-вторых, если у вас простое выделение, то все равно не слишком многословно что-то делать с ячейками. Для тестирования здесь он работает с диапазоном 2x2.
tell application "Microsoft Excel"
select range "D2:E3"
set c to selection
value of areas of c
--> {{7.0, 21.0}, {8.0, 24.0}} -- note hierarchy
set voop to {}
set ab to count of cells in c
repeat with x from 1 to ab
set end of voop to value of cell x of c as integer
end repeat
voop
--> {7, 21, 8, 24} -- note absence of hierarchy
end tell
Выбор нескольких областей
В-третьих, вот метод, который будет работать как со сложными, так и с простыми выделениями. Опять же, скрипт внизу будет заполнен подходящим примером данных.
areas of selection
возвращает список выбранных диапазонов. Это всегда список, поэтому даже если у вас всего один диапазон (или даже одна ячейка), вы получите список. Имея это в виду, это перебирает список выбранных диапазонов, а затем каждую ячейку в каждом диапазоне. Сценарий объемнее, чем должен быть, потому что я включил несколько примеров того, что вы можете делать, а также делать выборку и возвращать результаты.
tell application "Microsoft Excel"
activate
-- make complex selection
set aran to range "A:B 3:4"
set bran to range "D2:E3"
set cran to range "G5:H7"
select (union range1 aran range2 bran range3 cran)
with timeout of 10 seconds
set c to areas of selection
--> {range "[Workbook1]Sheet1!$A$3:$B$4" of application "Microsoft Excel", range "[Workbook1]Sheet1!$D$2:$E$3" of application "Microsoft Excel", range "[Workbook1]Sheet1!$G$5:$H$7" of application "Microsoft Excel"}
set voop to {} -- value
set coop to {} -- cell address
repeat with euRg in c -- each range area
set ceuRg to cells of euRg -- hierarchical cell list -- critical step!
repeat with xy in ceuRg -- each cell in range area
-- do random stuff with each cell
copy contents of xy to end of coop
copy value of xy as integer to end of voop
set value of xy to ((value of xy) / 2)
end repeat
end repeat
-- do more random stuff
set AppleScript's text item delimiters to space
display dialog voop as text -- display original values
--> 8 66 6 44 7 21 8 24 1 2 3 4 5 6
coop -- flattened cell list
--> {cell "$A$3" of application "Microsoft Excel", cell "$B$3" of application "Microsoft Excel", cell "$A$4" of application "Microsoft Excel", cell "$B$4" of application "Microsoft Excel", cell "$D$2" of application "Microsoft Excel", cell "$E$2" of application "Microsoft Excel", cell "$D$3" of application "Microsoft Excel", cell "$E$3" of application "Microsoft Excel", cell "$G$5" of application "Microsoft Excel", cell "$H$5" of application "Microsoft Excel", cell "$G$6" of application "Microsoft Excel", cell "$H$6" of application "Microsoft Excel", cell "$G$7" of application "Microsoft Excel", cell "$H$7" of application "Microsoft Excel"}
end timeout
end tell
Предварительно заполнить выборки
tell application "Microsoft Excel"
activate
set value of range "A:B 3:4" to {{8, 66}, {6, 44}}
set value of range "D2:E3" to {{7, 21}, {8, 24}}
set value of range "G5:H7" to {{1, 2}, {3, 4}, {5, 6}}
end tell