首页 > 解决方案 > 如何让脚本在所有带有复选框的行中运行,但让它在指定的行上做一些稍微不同的事情?

问题描述

我正在使用的脚本循环遍历电子表格并删除有复选标记的行中的项目。

我需要它在某些行上有变化。在此示例中,如果选中 F 中的复选框,我还需要它删除 A 列中第 123-137 行的内容。

这个剧本很棒,得到了田池的极大帮助

如果选中复选框,则使用脚本清除行中的指定单元格并在脚本运行后清除复选框

我尝试将以下脚本更改为包括:

return ar.concat(["B" + (i + 1) + ":D" + (i + 1), "F" + (i + 1), "A123:A137"]);

还有很多其他的调整。我不完全理解这个脚本中发生了什么。

function deleteRowContents (col){ // col is the index of the column to check for checkbox being true
  var col = 6; // If the column "F" is 6, please set 6.
  var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet4"); // Modified
  var data = sh.getDataRange().getValues();

  // Below script was modified.
  var deleteRanges = data.reduce(function(ar, e, i) {
    if (e[col - 1] === true) { // Modified
      return ar.concat(["B" + (i + 1) + ":D" + (i + 1), "F" + (i + 1)]);
    }
    return ar;
  }, []);
  if (deleteRanges.length > 0) { // or if (deleteRanges.length) { // Added
    sh.getRangeList(deleteRanges).clearContent();
  }
}

预期结果:对于指定的第 123-137 行,如果选中 F 中的复选框,则还清除 A 列中的内容。

实际结果:脚本错误、增加指数行数等。

标签: google-apps-scriptgoogle-sheets

解决方案


  • 当检查“ F”列的复选框时,您要删除其值A123:A137

如果我的理解是正确的,那么这个修改呢?

从:

if (deleteRanges.length > 0) { // or if (deleteRanges.length) { // Added
  sh.getRangeList(deleteRanges).clearContent();
}

至:

if (deleteRanges.length > 0) {
  deleteRanges.push("A123:A137"); // Added
  sh.getRangeList(deleteRanges).clearContent();
}

笔记:

  • 关于Actual results: Script errors, adding exponential number of rows, etc.,我无法理解你的情况。因此,如果上述修改对您的情况没有用,您能否提供一个示例电子表格来复制错误?通过这个,我想修改它。

编辑:

  • 当检查“ F”列的复选框时,您要删除其值A123:A137
    • I also need it to delete contents in column A for rows 123-137 if the checkbox in F is checked.您的问题中,我理解为上述修改。
    • 但在你的评论中,你说It should only delete contents in A123 if F123 was checked, for example.

从上面,我理解如下。

  • 当检查行是从123到137时,您要删除与该行相对应的列的值。

如果我的理解是正确的,那么这个修改呢?

从:

return ar.concat(["B" + (i + 1) + ":D" + (i + 1), "F" + (i + 1)]);

至:

if (i + 1 >= 123 && i + 1 <= 137) {
  return ar.concat(["B" + (i + 1) + ":D" + (i + 1), "F" + (i + 1), "A" + (i + 1)]);
}
return ar.concat(["B" + (i + 1) + ":D" + (i + 1), "F" + (i + 1)]);

推荐阅读