JS-код для применения нескольких функций к ячейке при редактировании - PullRequest
1 голос
/ 30 мая 2019

В настоящее время я пытаюсь написать JS-файл в редакторе сценариев на листе Google, чтобы не только создать временную метку в сочетании с установленным флажком, но и установить таймер, который, если флажок установлен более чем на X минут, в ячейке начнет краснеть.

Также, когда я снимаю флажок, чтобы сделать клетку зеленой. Идея заключается в том, чтобы подумать о парадигме хозяйки ресторана, когда я нажимаю на поле, означающее, что таблица заполнена, отметка времени дает мне время, когда флажок был установлен, а цвет показывает, что он недоступен. сброс счетчика времени и изменение ячейки обратно на зеленый. В настоящее время я могу получить часть метки времени для работы с написанным мной кодом и изменить цвет при первом редактировании, но он не будет колебаться между цветами, основываясь на флажке

Ниже приведен код, который у меня есть. Будет ли использоваться функция триггера или другая функция редактирования Если у кого-нибудь есть какие-либо советы или идеи, мы будем очень признательны

  • Для визуального представления каждый столбец, на который я ссылаюсь, представляет собой столбец застоя 1, который является номером места, флажки, идущие вниз по 2-му столбцу, и 3-й столбец, который указывает, в какое время флажок установлен и не отмечен
function onEdit() {
  var s = SpreadsheetApp.getActiveSheet();
  if (s.getName() == "Sheet1") { //checks that we're on the correct sheet
    var r = s.getActiveCell();
    if (r.getColumn() == 5) { //checks the column
      var nextCell = r.offset(0, 1);
      //if( nextCell.getValue() !== '' ) //is empty?
      nextCell.setValue(new Date().setFontColor('green');
      }

1 Ответ

0 голосов
/ 31 мая 2019

Код ниже должен работать:

function onEdit(e) {

  var s = SpreadsheetApp.getActiveSheet(); // the active sheet (no need to check if the sheet == sheet1 as the active sheet will always be the one that's being edited)
  var r = e.range; // the range of the edited cell
  var c = r.getColumn(); // the column of the range
  var timeDelay = 5; // number in seconds
  var checkbox = r.getValue(); // the value of the checkbox after being edited
  var date = new Date(); // the date for the timestamp

  if (c == 5 && checkbox == true) { // if the checkbox has been checked, change the color to red
    var nextCell = r.offset(0,1);
    Utilities.sleep(timeDelay * 1000); // Utilities.sleep takes a number in milliseconds
    nextCell.setValue(date).setBackground("red");
  } else if (c == 5 && checkbox == false) { // if the checkbox has been unchecked, change the color to green
    var nextCell = r.offset(0,1);
    nextCell.setValue(date).setBackground("green");
  }
}

Я сделал несколько ваших изменений, некоторые из них являются просто личным предпочтением того, что, на мой взгляд, более читабельно в долгосрочной перспективе, если вы добавите больше кода (т.е. объявите дату заранее, установив все свои переменные в начать и т. д.).

Однако, это определенно излишне, так как активный лист все равно вернет правильную вещь:

 if (s.getName() == "Sheet1")

Я также изменил setFontColor () на setBackground (), так как это звучало так, как вы и хотели из своего описания, и подумали, что вы можете не знать о функции, хотя вы, конечно, можете изменить ее обратно на setFontColor () без каких-либо проблем. ,

Я также добавил время задержки, о котором вы спрашивали, хотя я не уверен, зачем вам это нужно в этом контексте. Если это не то, о чем вы говорили, не стесняйтесь удалить эти две строки, а остальная часть кода будет работать нормально:

var timeDelay = 5; // number in seconds

и

   Utilities.sleep(timeDelay * 1000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...