【问题标题】:Google Scripts - Use a Script to find/replace to clear check boxesGoogle 脚本 - 使用脚本查找/替换以清除复选框
【发布时间】:2020-05-15 03:21:17
【问题描述】:

我在 Google 工作表上有一个仪表板,里面分布着各种复选框。

使用查找和替换功能,您可以将 TRUE 更改为 FALSE 以取消选中复选框。 我正在尝试使用脚本来做到这一点。这是我所拥有的:

function Refresh() {
  var sh = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = sh.getSheetByName("1");
  var range = sheet.getRange("Y4:Y33");
  var to_replace = true;
  var replace_with = false;
  replaceInSheet(sheet,range, to_replace, replace_with);
}




function replaceInSheet(sheet, range, to_replace, replace_with) {
  //Confirm
  var ui = SpreadsheetApp.getUi(); 
  var spread = SpreadsheetApp.getActiveSpreadsheet();

  var result = ui.alert(
     "Will reset sheet for new week ",
     'Are you sure you want to continue?',
      ui.ButtonSet.YES_NO);

  // Process the user's response.
  if (result == ui.Button.YES) {

    // User clicked "Yes".
    spread.toast("Will update " + to_replace + " to " + replace_with + " ", "ALERT");

    var data  = range.getValues();

    var oldValue="";
    var newValue="";
    var cellsChanged = 0;

    for (var row=0; row<data.length; row++) {
      for (var item=0; item<data[row].length; item++) {
        oldValue = data[row][item];
        newValue = data[row][item].replace(to_replace, replace_with);
        if (oldValue!=newValue)
        {
          cellsChanged++;
          data[row][item] = newValue;
        }
      }
    }
    range.setValues(data);
    spread.toast(cellsChanged + " cells changed", "STATUS");
  }
  else {
    // User clicked "No" or X in the title bar.
    spread.toast("No action taken", "ABANDONED");
  }
}  

如果 var to_replacevar replace_with 是一段文本,则没有问题。 但是,如果我像上面所做的那样尝试使其正确和错误,则会出现错误。

TypeError: 在对象 true 中找不到函数替换

我做错了什么?我知道这是一个布尔 V 字符串。

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    Boolean 类型没有 replace() 方法。使用toString() 转换为string 类型:

    newValue = data[row][item].toString().replace(to_replace, replace_with);
    

    要取消选中复选框,更简单的方法是使用range.uncheck()

    function Refresh() {
     SpreadsheetApp.getActive()
          .getSheetByName("1")
          .getRange("Y4:Y33")
          .uncheck()
    }
    

    【讨论】:

      【解决方案2】:

      它不起作用的原因是boolean 没有replace 函数。为了实现您的目标,您可以执行以下操作。

      for (var row=0; row<data.length; row++) {
        for (var item=0; item<data[row].length; item++) {
          oldValue = data[row][item];
          if(oldValue === to_replace) {
            cellsChanged++;
            data[row][item] = replace_with;
          }
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-03-28
        • 1970-01-01
        • 1970-01-01
        • 2017-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多