TRUE установите флажок и запустите фоновый таймер, затем автоматически установите TRUE в следующие два столбца флажка - PullRequest
2 голосов
/ 02 октября 2019

Когда я нажимаю ИСТИНА флажок, затем запускаю фоновый таймер, через 3 дня автоматически нажимается ИСТИНА в следующих двух столбцах флажка, в противном случае, если флажок установлен в ЛОЖЬ, следующий 2 столбец флажка является прямым (без таймера) в ЛОЖЬ.

Пожалуйста, помогите, я не могу исправить это долгое время уже ...

Я ссылаюсь на этот пример: https://support.google.com/docs/thread/3199678?hl=en

function onCheck()
{
  var selection = SpreadsheetApp.getActiveSpreadsheet().getSelection();
  var currentCell = selection.getCurrentCell();
  var date = new Date();
  var time = date.getTime();
  PropertiesService.getScriptProperties().setProperty(time,currentCell);
}

function autoCheck()
{
  var selection1 = SpreadsheetApp.getActiveSpreadsheet().getSelection();
  var currentCell1 = selection1.getCurrentCell();
  var props = PropertiesService.getScriptProperties();
  var nowDate = new Date();
  var nowDay = 3000; //milliseconds for 1 full day
  var r = currentCell1.getRow();
  //var c = currentCell1.getColumn();
  //var range = currentCell1.getRange(c,r);
  var keys = props.getKeys();
  for(var i in keys)
  {
    var time = parseInt(keys[i]);
    if(nowDate.getTime() - time > nowDay);
    {
    if(selection1.getCurrentCell("TRUE"))r+2.setValue("TRUE");
    }
    if(selection1.getCurrentCell("FALSE"))r+2.setValue("FALSE");
  }
}  

Вопрос ОбъяснитьImage Я добавил картинку, чтобы объяснить свой вопрос ... Извините ...

Извините, плохой английский и плохой код ... Пожалуйста, помогите мне

Спасибо!

1 Ответ

0 голосов
/ 02 октября 2019

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

Вот код, который я тестировал:

function saveCheckedCell(e) {
  //Checks if the previous value was false (unchecked) and if the new value is true (checked)
  if(e.oldValue.toUpperCase() == "FALSE" && e.value.toUpperCase() == "TRUE") {
    var selection = SpreadsheetApp.getActiveSpreadsheet().getSelection();
    var currentCell = selection.getCurrentCell().getA1Notation();

    //Creates the trigger to call the autoCheck function after 3 days
    var trigger = ScriptApp.newTrigger("autoCheck")
    .timeBased()
    .after(3 * 3600 * 24 * 1000)
    .create();

    var triggerId = trigger.getUniqueId();
    PropertiesService.getScriptProperties().setProperty(triggerId, currentCell);    
  }
  else if(e.oldValue.toUpperCase() == "TRUE" && e.value.toUpperCase() == "FALSE") {
    var r = e.range;
    r.offset(0, 2).uncheck();    
  }
}

function autoCheck(e) {
  var triggerId = e.triggerUid;

  //Gets the recently checked cell
  var a1Notation = PropertiesService.getScriptProperties().getProperty(triggerId);
  var r = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1').getRange(a1Notation);

  //Unchecks the 2 cells below the recently checked cell
  r.offset(0, 2).check();

  //Deletes the time trigger
  var triggers = ScriptApp.getProjectTriggers();
  for (var i = 0; i < triggers.length; i++) {
    if (triggers[i].getUniqueId() == triggerId) {
      ScriptApp.deleteTrigger(triggers[i]);
    }
  }
}  

//Run this function only once to create the onEdit trigger
function createSpreadsheetEditTrigger() {
  var ss = SpreadsheetApp.getActive();
  ScriptApp.newTrigger('saveCheckedCell')
  .forSpreadsheet(ss)
  .onEdit()
  .create();
}

В первый раз вам нужно запустить код прямо из скрипта приложений, чтобы вы могли авторизовать разрешения. Запустите функцию createSpreadsheetEditTrigger (), и он создаст сценарий и запросит экран согласия oauth.

Если вам это нужно, это области, которые вы должны иметь в файле манифеста [4]: ​​["https://www.googleapis.com/auth/script.scriptapp"," https://www.googleapis.com/auth/spreadsheets"]

[1] https://developers.google.com/apps-script/reference/properties/properties-service

[2] https://developers.google.com/apps-script/reference/script/clock-trigger-builder

[3] https://developers.google.com/apps-script/reference/spreadsheet/range#uncheck()

[4] https://developers.google.com/apps-script/concepts/manifests

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...