【问题标题】:How to check a checkbox in Google Apps Script and uncheck all the other cells?如何选中 Google Apps 脚本中的复选框并取消选中所有其他单元格?
【发布时间】:2021-01-09 15:17:28
【问题描述】:

所以我试图在 Google 表格上制作一个登录/注册表单,我有两个复选框,一个显示登录,一个显示注册。在我的应用程序脚本中,我试图使它只能检查其中一个。这是我的代码,它不起作用。帮忙?

function signupLogin() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  if (sheet.getRange('A13').isChecked() === 'TRUE') {
    sheet.getRange('B13').setValue('FALSE');
  } else {
    sheet.getRange('B13').setValue('TRUE'); 
  }
}

代码将始终勾选第二个复选框,即使第一个复选框已勾选。

【问题讨论】:

  • 解释“它不工作。
  • @TheMaster 代码将始终勾选第二个复选框,即使第一个复选框已勾选。

标签: javascript google-apps-script google-sheets checkbox


【解决方案1】:

问题:

if (sheet.getRange('A13').isChecked() === 'TRUE') {

如果操作数的类型不同,返回false

解决方案:

  • 使用与文字布尔值true进行严格比较

    if (sheet.getRange('A13').isChecked() === true) {
    
  • 或者如果不期望null,则直接在if的条件下使用返回的布尔值:

    if (sheet.getRange('A13').isChecked()) {
    

【讨论】:

  • 很好地解释了这个问题,但他仍然需要从脚本编辑器运行该函数...
  • @Marios 嗯...是的。否则它将在每次编辑时运行。可能不是 op 想要的。
【解决方案2】:

您实际上是在将在此处输入代码 sheet.getRange('A13').isChecked() 的布尔结果与导致始终为错误表达式的字符串文字进行比较。 只需检查布尔值:

function signupLogin() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  if (sheet.getRange('A13').getValue()) {
    sheet.getRange('B13').setValue('FALSE');
  } else {
    sheet.getRange('B13').setValue('TRUE'); 
  }
}

【讨论】:

    【解决方案3】:

    当您选中A13B13 时,将自动取消选中另一个单元格。

    因此,我认为onEdit() 解决方案是您正在寻找的:

    function onEdit(e) {
      
      const as = e.source.getActiveSheet();
      const cell = e.range.getA1Notation();
      const cell_checks = ['A13','B13'];
      if(as.getName() == "Sheet1" && cell_checks.includes(cell) && e.range.isChecked())
      {cell_checks.filter(val=>val!=cell).forEach(c=>as.getRange(c).uncheck())}  
    }
    

    要使用此解决方案,只需将上述代码保存到脚本编辑器,然后每次单击Sheet1 中的复选框(根据需要修改名称)其余复选框将是未选中。

    此代码也是可扩展的。也就是说,如果您想拥有 多个 复选框,并且当您单击其中一个时,其余的将变为未选中状态。您可以在此处定义复选框列表:

     const cell_checks = ['A13','B13'];
    

    【讨论】:

    • 我真的很想试试这个,但是我用什么替换所有的“e”呢?就像在 onEdit(e) 中一样,e.source.getActiveSheet(); e.range.getA1Notation 和 e.range.isChecked())。我是 Apps 脚本的新手
    • 您只需将其粘贴到脚本编辑器后保存此代码。您不需要手动执行它。然后确保复选框位于名为 Sheet1 的工作表和单元格 A13、B13 中。您可以从代码中更改后者,非常简单。
    • 顺便说一句优雅的编程技巧
    【解决方案4】:

    对于“如何检查 Google Apps 脚本中的复选框?”的问题

    SpreadsheetApp.getActiveSpreadsheet()
      .getSheetByName('sheetName')
      .getRange('D5')
      .check();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-25
      • 1970-01-01
      • 2016-01-29
      相关资源
      最近更新 更多