#google-apps-script #google-sheets
#google-apps-script #Google-Sheets
Вопрос:
Я создаю журнал посещаемости в классе в Google Таблицах. У меня есть столбец с именем каждого ученика и столбец для времени, когда они прибыли в класс. Я хочу включить кнопку для каждого учащегося, которую я могу нажать, чтобы запустить скрипт, который вставляет текущее время в ячейку времени прибытия для этого учащегося. Есть ли способ найти местоположение кнопки, чтобы мой скрипт мог вставить время в соответствующую ячейку?
Вот как я настроил свой лист: https://docs.google.com/spreadsheets/d/19wRj1zPGf1hm8PDUYtEF2XUxirhk2lIJbHAZF9e9YqE
Есть ли лучший способ сделать это? Я поиграл с NOW()
формулой, но она обновляется каждый раз, когда я делаю что-то еще на листе. Это могло бы быть жизнеспособным вариантом, если бы я мог каким-то образом заставить его оставаться неизменным.
Комментарии:
1. ваш заголовок и описание кажутся совершенно не связанными?
2. Я не знаю, что такое «местоположение чертежа», но вы должны иметь возможность использовать now() с CopyTo с аргументом типа: source.CopyTo(ss.getRange(‘A1’), {contentsOnly: true});
3. @Baby_Boy, я обновил заголовок и описание вопроса. Надеюсь, это прояснит то, что я ищу.
Ответ №1:
Насколько я понимаю, вы хотите получить строку ячеек чертежа, на которую нажимается, чтобы включить запись времени для конкретного ученика.
Это невозможно, когда вы щелкаете по чертежу / изображению, вы щелкаете только по чертежу / изображению. Это не делает ячейку, в которой находится изображение, активной. Поэтому мы не можем использовать метод getActiveRange
and getSelection
для определения местоположения ячейки, в которой находится изображение.
Один из обходных путей, который я мог бы придумать, — это использовать флажки вместо рисунков. При нажатии флажков ячейка становится активной.
Пример кода:
function onEdit(e) {
const sheet = e.source.getActiveSheet();
const cell = e.range
// Check if checkbox was checked and there is no time-entry yet
if (cell.isChecked() == true amp;amp; cell.offset(0,-1).isBlank()){
//Include time entry on the left side of the checkbox
//var date = Utilities.formatDate(new Date(), 'America/Los_Angeles', 'MMMM dd, yyyy HH:mm:ss Z');
var date = Utilities.formatDate(new Date(), 'America/Los_Angeles', 'HH:mm:ss Z');
cell.offset(0,-1).setValue(date);
// Uncheck the checkbox
cell.setValue(false);
} else if (cell.isChecked() == true) {
// Uncheck the checkbox
cell.setValue(false);
}
}
Вы можете изменить формат вашей временной метки в зависимости от ваших предпочтений. В этом примере я отображал только текущее время. См. раздел Работа с датами и временем
Вывод:
Я сбрасываю флажок после установки метки времени.
Комментарии:
1. Это идеально! Спасибо!