【问题标题】:Google Sheets Script: Deleting range based off checkboxGoogle表格脚本:删除基于复选框的范围
【发布时间】:2020-06-12 18:51:16
【问题描述】:

我正在尝试将宏转换为 OnEdit 函数。

我的范围是 A2:R7。它没有可见的过滤器。 Col A (A3:A7) 中有复选框。

如果选中了一个复选框,我希望它清除活动行 (A:O) 和 (Q:R) 的相应内容。 注意,Col P 中有一个公式,我希望保留它。

当内容被清除后,我希望它取消选中该框,并对范围内的剩余内容进行排序(A2:A7)。

他是分配给第 5 行的宏。

function macro1() {
  var spreadsheet = SpreadsheetApp.getActive();

  // Set checkbox to FALSE
  spreadsheet.getRange('A5').activate();
  spreadsheet.getCurrentCell().setValue('FALSE');

  // Clear contents Col B to Col O and Col Q to Col R
  spreadsheet.getRange('B5:O5').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('Q5:R5').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});

  // Create filter, sort, remove filter
  spreadsheet.getRange('A2:R7').createFilter();
  spreadsheet.getActiveSheet().getFilter().sort(2, true);
  spreadsheet.getActiveSheet().getFilter().remove();}

我解决它的尝试相对徒劳,因为我对使用脚本非常陌生。主要的挫败点是把它分配给一个复选框。

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:
    • 在你的情况下,
      • “A3:A7”有复选框。
      • 选中复选框时,您希望清除单元格“B:O”和“Q:R”的内容。
      • 您想在脚本运行后取消选中复选框。
      • 您希望保留“P”列的公式。
    • 您希望通过 Google Apps 脚本使用 OnEdit 事件触发器来实现此目的。

    如果我的理解是正确的,那么这个答案呢?请认为这只是几个可能的答案之一。

    示例脚本:

    请复制并粘贴以下脚本,并保存脚本。

    function onEdit(e) {
      const range = e.range;
      const sheet = range.getSheet();
      if (range.columnStart == 1 && range.rowStart >= 3 && range.rowStart <= 7 && e.value == "TRUE") {
        const row = range.rowStart;
        sheet.getRangeList([`B${row}:O${row}`, `Q${row}:R${row}`]).clearContent();
        range.uncheck();
      }
    }
    
    • 在此脚本中,当在电子表格上检查“A3:A7”的复选框时,onEdit()的功能由OneDIT事件触发器作为简单触发运行。本例使用if (range.columnStart == 1 &amp;&amp; range.rowStart &gt;= 3 &amp;&amp; range.rowStart &lt;= 7 &amp;&amp; e.value == "TRUE")的if语句。
    • 选中该复选框后,“B:O”和“Q:R”单元格将被清除为clearContent()
    • 然后,用uncheck() 取消选中复选框。

    注意:

    • 在脚本编辑器直接运行onEdit的函数时,会出现TypeError: Cannot read property 'range' of undefined这样的错误。该脚本由简单触发器自动运行。所以请检查复选框。请注意这一点。
    • 根据您的脚本,我使用了活动表。但如果您想为特定工作表运行脚本,请告诉我。
    • 在此脚本中,请使用启用 V8。

    参考资料:

    如果我误解了您的问题并且这不是您想要的方向,我深表歉意。

    补充:

    当您要运行特定工作表的脚本时,请将上述脚本修改如下。

    发件人:

    if (range.columnStart == 1 && range.rowStart >= 3 && range.rowStart <= 7 && e.value == "TRUE") {
    

    收件人:

    if (sheet.getSheetName() == "Sheet1" && range.columnStart == 1 && range.rowStart >= 3 && range.rowStart <= 7 && e.value == "TRUE") {
    
    • 当编辑的工作表是“Sheet1”时,脚本运行。在这种情况下,“Sheet1”的工作表需要有复选框。请注意这一点。

    【讨论】:

    • 完美运行。我知道如何添加过滤器的东西,所以稍后会这样做。对此,我真的非常感激。我的尝试真的被不必要的代码臃肿。感谢您的参考和详细解释。这真的有助于我了解正在发生的事情。
    • 这是针对特定工作表的,但我想我可以为此定义变量:) 再次感谢您。我投了赞成票,但它说我需要更多的代表来展示。
    • @Adam Hurrell 感谢您的回复。我很高兴你的问题得到了解决。关于具体的工作表,我又增加了一个修改点。你能确认一下吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多