首页 > 解决方案 > Google表格脚本:删除基于复选框的范围

问题描述

我正在尝试将宏转换为 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-scriptgoogle-sheets

解决方案


  • 在你的情况下,
    • “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 语句if (range.columnStart == 1 && range.rowStart >= 3 && range.rowStart <= 7 && e.value == "TRUE")
  • 当复选框被选中时,单元格“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”的工作表需要有复选框。请注意这一点。

推荐阅读