【问题标题】:Google Spreadsheets tickbox with time-driven reset adds value to additional columns具有时间驱动重置功能的 Google 电子表格复选框为其他列增加了价值
【发布时间】:2020-10-12 17:51:42
【问题描述】:

非常环保,正在寻求有关内部客户跟踪文档的潜在脚本的帮助。理想情况下,当您选中框 D 列(值 = TRUE)时,G 列将增加 +1,H 列将减少 -1。我希望复选框在午夜重置,但保留 G 和 H 中的值。

有人能帮帮这个绿姑娘吗?

https://docs.google.com/spreadsheets/d/187N0kY8wh-7I-SSGTqwjqdFLy6wCB-ujIj301KXtZhE/edit?usp=sharing

【问题讨论】:

    标签: google-apps-script google-sheets google-sheets-formula


    【解决方案1】:

    你基本上是在问两个问题。


    您需要一个onEdit() 函数,当您选中 D 列中的框时,该函数将允许您分别增加和减少 G 列和 H 列的值:

    function onEdit(e) {
      
      const row = e.range.getRow();
      const col = e.range.getColumn();
      const as = e.source.getActiveSheet();
     
      if(as.getName() == "Sheet1" && col == 4 && e.range.getValue() === true) {  
        const plus_val = as.getRange(row,7).getValue();
        const minus_val = as.getRange(row,8).getValue();
        as.getRange(row,7).setValue(plus_val!=''?plus_val+1:1);
        as.getRange(row,8).setValue(minus_val!=''?minus_val-1:-1);
      }
    }
    

    然后您需要为函数 clearCheckboxes() 设置一个 time-driven trigger 以清除(设为 False)D 列中的复选框:

    function clearCheckboxes(){
    
    const ss = SpreadsheetApp.getActive();
    const sh = ss.getSheetByName('Sheet1');
    sh.getRange('D2:D'+sh.getLastRow()).clearContent();
    }
    

    说明:

    1. 选择您喜欢的工作表名称;将两个脚本中的 Sheet1 调整为您感兴趣的工作表的名称。
    2. onEdit(e)clearCheckboxes() 复制并粘贴到脚本编辑器中的空脚本中,然后单击保存。每当您选中 D 列中的复选框时,都会进行所需的计算。
    3. clearCheckboxes() 创建一个时间触发器。为此,您可以单击项目的触发器并为此特定功能创建一个时间驱动的触发器。

    【讨论】:

      【解决方案2】:
      function onEdit(e) {
        const sh=e.range.getSheet();
        const sr=2;
        if(sh.getName()=='Your Sheet Name' && e.range.columnStart==4 && e.range.rowStart>sr && e.range.getValue()=="TRUE") {
          e.range.offset(0,3).setValue(e.range.offset(0,3).getValue()+1);
          e.range.offset(0,4).setValue(e.range.offset(0,4).getValue()+1);
        }
      }
      
      function toRunAtMidnight() {
        const ss=SpreadsheetApp.getActive();
        const sr=2;
        const sh=ss.getSheetByName('Your Sheet Name');
        sh.getRange(sr,4,sh.getLastRow()-sr+1,1).setValue("FALSE");
      }
      

      【讨论】:

      • 谢谢!我能够合并,这是完美的。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-05
      • 2019-06-12
      • 1970-01-01
      • 1970-01-01
      • 2012-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多