Теперь я понимаю, что вопрос глубже и связан с отслеживанием событий.
В Excel я использую этот код:
If Not Intersect(Target, Sh.Range("$A$1:$A$300")) Is Nothing sub_do_something()
Здесь, Target - адрес выбранной ячейки, Пересечь определяет, принадлежит ли ячейка к указанному диапазону.
Я использую его в системе для заполнения и расчета стоимости проекта.
Пользователь щелкает строку в определенном разделе шаблона расчета. Сценарий определяет адрес выбранной ячейки и переключает пользователя на конкретный лист каталога. Далее пользователь нажимает на нужную строку каталога, скрипт копирует определенный диапазон ячеек в строке и возвращает пользователя обратно в расчет. Когда это происходит, скопированные данные вставляются в диапазон ячеек, начиная с выбранной.
Таким образом, создание расчета, в котором может быть более 100 позиций, значительно упрощается.
В Excel все работает отлично, но вскоре я планирую перенести этот проект в облачный сервис, и Google Sheets - лучший вариант.
Увы, только некоторые события могут отслеживаться в GAS, например, с помощью триггеров onOpen или onEdit.
В Excel гораздо больше отслеживается событий .
После поиска в StackOverflow я обнаружил несколько похожих проблем, связанных с трассировкой событий, например, Как найти курсор пользователя в сценарии с привязкой к документу , Можем ли мы реализовать некоторый код что срабатывает при выборе чего-либо в документе Google? , Выбранные диапазоны электронных таблиц монитора приложений Google .
Из ответов на эти вопросы ясно, что в GAS нет такого простого решения, как Intersect (Target, Range) в Excel.
В последнем примере используется боковое меню, запускается из него скрипт, который запрашивает лист 5 раз в секунду и отображает адрес активной ячейки в поле «data».
К сожалению, этот код не работает для меня. В отладчике функция getActiveRange () работает нормально, но этот код не работает:
$(document).ready(() => {
setInterval(()=>{
google.script.run.withSuccessHandler(log).getActiveRange();
},200)
})
log(e) => {
$('#data').val(e)
}
Вопрос.
Если кто-то сделал что-то подобное, пожалуйста, поделитесь своим опытом.
Или скажите мне, почему этот пример не работает. Если он сможет реанимироваться, я адаптирую его для решения моей задачи.