Checkbox 谷歌电子表格勾选框增量和时间驱动重置

Checkbox 谷歌电子表格勾选框增量和时间驱动重置,checkbox,google-apps-script,google-sheets,increment,Checkbox,Google Apps Script,Google Sheets,Increment,我想在电子表格上使用勾选框功能;当在一天结束时勾选时,定义的单元格值将增加,勾选框将重置 function resetCells() { var ss = SpreadsheetApp.getActive() .getSheetByName('Lordaeron'); var cells = ['B2:B1000'] .map(function (c) { ss.getRange(c) .setValue("FALSE"); });

我想在电子表格上使用勾选框功能;当在一天结束时勾选时,定义的单元格值将增加,勾选框将重置

    function resetCells() {
var ss = SpreadsheetApp.getActive()
    .getSheetByName('Lordaeron');
var cells = ['B2:B1000']
    .map(function (c) {
        ss.getRange(c)
        .setValue("FALSE");
    });
}
这将重置带有时间触发器的复选框,我需要添加条件增量。如果B列值为TRUE,则C列值将在同一行中递增

例如:

首张>>

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    |
下面是示例基板

提前谢谢

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

另外,我问如何将上限增加为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);
}
函数resetDaily(){
var ss=SpreadsheetApp.getActive().getSheetByName('Sheet');
var range=ss.getDataRange().offset(1,0,ss.getLastRow()-1);
var values=range.getValues().map(函数(e){
如果(数字(e[8])
  • resetCells()
    安装为执行
    的时间触发器,如果在一天结束时选中了复选框。
    。这由您自己完成
  • 当运行
    resetCells()
    时,它会选中列“A”的所有复选框
  • 如果某行的复选框为
    false
    ,则对该行不执行任何操作
  • 如果行的复选框为
    true
    ,则对于该行,它将
    +6
    添加到列“C”的值,并将
    +1
    添加到列“D”的值。然后,它将该行的列“a”的值更改为
    false
如果我对你的情况和你想要的东西的理解是正确的,那么这次修改怎么样?我认为对你的情况有几个答案。所以请把这当作其中之一

修改点:
  • 在脚本中,“A”列的所有值都更改为
    false
    。但无法检索原始值。因此,没有用于修改“C”列和“D”列的资料
  • 此修改脚本的流程如下所示。
  • 检索数据范围的所有值
  • 修改值
  • 使用修改后的值覆盖图纸
修改脚本: 请按如下方式修改您的脚本

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
    的情况,我认为可以通过包含用于检查列“A”的值的脚本来降低流程成本
补充: 在此更新中,当列“C”的值为100时,脚本可以将该值更改为边界

函数resetCells(){
var ss=SpreadsheetApp.getActive().getSheetByName('Sheet');
var range=ss.getDataRange().offset(1,0,ss.getLastRow()-1);
var values=range.getValues().map(函数(e){

如果(数字(e[2])<100){//或者什么阻止了你?你需要。启动并发布你的代码。在你的脚本中,你似乎试图从B列检索复选框的值。但是在你的示例表中,它似乎被放在A列。如果你的脚本不是最新的,请修改它。为了正确理解你的情况,你能支持吗查看电子表格样本?当然,请删除您的个人信息。这是我尝试实现的简单基础。如果在一天结束时勾选了勾选框。出勤日将增加+1,作业分数将增加+6,勾选框将重置。感谢您的回复。我发布了一个答案,因为我认为我可以从您共享的电子表格和评论中了解您的情况。您能确认一下吗?如果我误解了您的要求,请告诉我。我想修改它。此代码包括我试图实现的所有内容。先生,非常感谢您的帮助和兴趣。我非常感谢。我最近注意到,这可能吗添加分配点的上限?例如,不超过100@Kutay感谢您的回复。我很高兴您的问题得到了解决。关于您的新问题,这是可能的。因此,我在我的回答中添加了更新的脚本。您能确认一下吗?我不确定您想要的规范。因此,请替换
//做点什么
添加到您想要的脚本。@Kutay很抱歉。当您添加脚本时,是否可以将其添加到您的问题中?我已修复。很抱歉,我还不习惯stackoverflow。我还有更多问题,但我想我应该为它们创建新的线程。亲爱的先生,再次感谢您
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);
}