Увеличение отметки в Google Spreadsheets и управляемый временем сброс - PullRequest
0 голосов
/ 09 сентября 2018

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

    function resetCells() {
var ss = SpreadsheetApp.getActive()
    .getSheetByName('Lordaeron');
var cells = ['B2:B1000']
    .map(function (c) {
        ss.getRange(c)
        .setValue("FALSE");
    });
}

Это сбрасывает флажок с временным триггером, мне нужно добавить условное приращение. Если значение B columb равно TRUE, значение C columb будет увеличиваться в той же строке.

Пример:

Начальная страница >>

Checkbox |  Value 1 | Value 2 |  
-------------------------------
   X     |     1    |    0    | 
   V     |     2    |    0    |
   X     |     3    |    1    | 
   V     |     1    |    2    | 
   X     |     2    |    3    |

Через день [Желаемый результат] >>

Checkbox |  Value 1 | Value 2 |  
-------------------------------
   X     |     1    |    0    | 
   X     |     3    |    1    |
   X     |     3    |    1    | 
   X     |     2    |    3    | 
   X     |     2    |    3    |

https://docs.google.com/spreadsheets/d/1khPC5r2p0b1srsEGka3fl-GAl6nHACaVR0Cf31cqA1o/edit?usp=sharing вот пример базового листа.

Заранее спасибо

==============================================

Additinally Я спросил, как добавить верхний предел как 100, чтобы не достичь определенного числа. Благодаря Tanaike я исправил проблему с помощью этого фрагмента кода:

function resetDaily() {
  var ss = SpreadsheetApp.getActive().getSheetByName('Sheet');
  var range = ss.getDataRange().offset(1, 0, ss.getLastRow() - 1);
  var values = range.getValues().map(function(e) {
    if (Number(e[8]) <= 94) {
    return e[0] ? [false, e[1], Number(e[2]) + 6, Number(e[3]) + 1] : e;
    } else {
      return e[0] ? [false, e[1], 100, Number(e[3]) + 1] : e;
    }
  }); 
  range.setValues(values);
}

1 Ответ

0 голосов
/ 12 сентября 2018
  • resetCells() устанавливается как триггер времени для выполнения If tickbox is checked at the end of the day.. Это делается самостоятельно.
  • Когда resetCells() запущен, он проверяет все флажки столбца "A".
  • Если флажок строки false, ничего не делать для строки.
  • Если флажок строки true, для строки добавьте +6 к значению столбца «C» и добавьте +1 к значению столбца «D». И затем он изменяет значение столбца «A» строки на false.

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

Очки модификации:

  • В вашем скрипте все значения столбца "A" изменяются на false. Но исходные значения не могут быть восстановлены. Так что нет никаких материалов для модификации колонок "C" и "D".
  • Порядок работы этого модифицированного скрипта следующий.
    1. Получить все значения диапазона данных.
    2. Изменить значения.
    3. Перезаписать лист, используя измененные значения.

Модифицированный скрипт:

Пожалуйста, измените ваш скрипт следующим образом.

function resetCells() {
  var ss = SpreadsheetApp.getActive().getSheetByName('Sheet');
  var range = ss.getDataRange().offset(1, 0, ss.getLastRow() - 1);
  var values = range.getValues().map(function(e) {
    return e[0] ? [false, e[1], Number(e[2]) + 6, Number(e[3]) + 1] : e;
  });
  range.setValues(values);
}

Примечание:

  • Если часто возникает ситуация, когда все значения столбца «А» равны false, я думаю, что стоимость процесса можно уменьшить, включив скрипт для проверки значений столбца «А».

Добавлено:

В этом обновлении скрипт может изменить значение в качестве границы, если значение столбца «C» равно 100.

function resetCells() {
  var ss = SpreadsheetApp.getActive().getSheetByName('Sheet');
  var range = ss.getDataRange().offset(1, 0, ss.getLastRow() - 1);
  var values = range.getValues().map(function(e) {
    if (Number(e[2]) < 100) { // or <= 100
      return e[0] ? [false, e[1], Number(e[2]) + 6, Number(e[3]) + 1] : e;
    } else {
      // do something
    }
  });
  range.setValues(values);
}
...