Google 电子表格复选框增量和时间驱动重置

Google Spreadsheets tickbox increment and time-driven reset

我想在 spreadsheets 上使用复选框功能;当它在一天结束时被勾选时,定义的单元格值将增加并且复选框将重置。

    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 值将在同一行中递增。

示例:

初始 Sheet >>

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 这里是示例基础 sheet.

提前致谢

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

此外,我问了如何将上限添加为 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);
}
  • 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. 使用修改后的值覆盖 sheet。

修改后的脚本:

请按如下方式修改您的脚本。

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);
}

注:

  • 如果经常出现"A"列的所有值都是false的情况,我认为可以通过包含检查[=64]列的值的脚本来降低处理成本=].

已添加:

在本次更新中,当"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);
}