Отметка флажка запускает функцию добавления отметки времени - PullRequest
2 голосов
/ 27 марта 2019

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

Я буквально провел целый деньпоиск все в Stackoverflow и Google, и я попробовал много разных методов и функций.Прежде всего, я использовал функцию onEdit(e), чтобы (попытаться) добавить метку времени.Ранние попытки выявили известный недостаток, который означал, что onEdit(e) не захватывал все экземпляры состояния изменения флажка.Соответственно, я изменил свой подход, пытаясь добавить метку времени к соответствующей соседней ячейке, а также добавить примечание к ячейке флажка - оба, казалось, работали спорадически, что было крайне неприятно.

У меня есть три основных проблемы сэта проблема на данный момент:

  1. Знание синтаксиса для проверки значения флажка (я использую == или ===, и я использую ' ', ", или без кавычек?).Это звучит как очень глупый вопрос, но у меня есть трудности с обучением, и у меня возникают серьезные проблемы с сохранением письменной информации в моей памяти: (

  2. Успешная установка оператора if '->' else if 'это будет «включать» или выключать отметку времени в зависимости от состояния флажка.

  3. Я бы предпочел установить заметку с отметкой времени в ячейке флажка, которая очищается при установке флажкане отмечен - однако несколько раз, когда я заставлял его работать, часовой пояс был неправильным. Я много читал о timezone, но без рабочего примера я не смог понять, как внедрить его в мой код. Я +10 GMT

Я предоставил урезанную версию своей электронной таблицы, содержащую только конкретный лист и код, с которыми у меня возникли проблемы:

https://docs.google.com/spreadsheets/d/1NCdMziBpj0joSv9lQfqT9etz9hMsvgMeuT8X9XTxR20/edit?usp=sharing

Вот последняя итерация кода, над которой я работал. Я, вероятно, попытался с полдюжины совершенно разных функций, но удалил каждую после sevНесколько часов удара по кирпичным стенам:

function onEdit() {
  var ss = SpreadsheetApp.getActiveSheet();

  if(ss.getName() == "Quests" ) { //checks that we're on the correct sheet
    var tickboxCell = s.getActiveCell();
    if(tickboxCell.getColumn() == 3 && tickboxCell.getValue() === 'TRUE' ) { //checks the status of the tickbox
      var dateCell = tickboxCell.offset(0, 1);
      dateCell.setValue(new Date());
    }
  }
}

Вот пример кода, который я изменил для добавления примечания к флажку:

function setNote(note){
    var note = note;
    var cell = SpreadsheetApp.getActiveSheet().getActiveCell();

    if(note == ""){
        cell.clearNote();
    }else{
        cell.setNote(note);
    }
}

Я ожидаю, что в любое время флажок будет отмеченлибо соответствующая ячейка справа будет вводить date(), либо, в качестве альтернативы, флажок добавит примечание, в котором будет указано «Задание выполнено: дд / мм / ггг» (часовой пояс +10 по Гринвичу).Затем я бы ожидал, что ячейка отметки времени очистится или заметка будет очищена, если состояние флажка не отмечено.

Ответы [ 2 ]

3 голосов
/ 27 марта 2019

попробуйте это:

function onEdit(e) {
  if(e.range.getSheet().getName() != 'Quests') { return; }
  if(e.range.columnStart==3 && e.value=="TRUE") {
    e.range.offset(0,1).setValue(Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "yyyyMMdd:HHmm"));
  }
}
1 голос
/ 28 марта 2019

Спасибо Куперу, который поставил меня на правильный путь своим кодом. Он не делал то, что я искал, но позволил мне внести в него несколько небольших изменений, чтобы получить именно то, что я искал.

РЕДАКТИРОВАТЬ: Я нашел решение для setNote, которое я предоставлю здесь.

Код для добавления / удаления даты в соседней ячейке:

function onEdit(e) {
  if (e.range.getSheet().getName() != 'Quests') { return; }
  if (e.range.columnStart==3 && e.value=="TRUE") {
    e.range.offset(0,1).setValue(new Date());
  }
  else if (e.range.columnStart==3 && e.value=="FALSE") {
    e.range.offset(0,1).clearContent();
  }
} 

Код для добавления / удаления setNote из флажка с правильным часовым поясом:

  if(e.range.getSheet().getName() != 'Quests') { return; }
  if(e.range.columnStart==3 && e.value=="TRUE") {
    e.range.setNote('Completed: ' + Utilities.formatDate(new Date(), SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "dd-MM-yy HH:mm:ss"));
  }
  else if (e.range.columnStart==3 && e.value=="FALSE") {
    e.range.clearNote();
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...