如何让脚本在所有带有复选框的行中运行,但在指定的行上有一些不同之处?

时间:2019-05-10 03:15:24

标签: google-apps-script google-sheets

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

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

这个脚本是很棒的脚本,在Tanaike的帮助下

If Checkbox is checked, use a script to clear specified cells in row and clear checkbox after script is run

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

返回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列中的Content。

实际结果: 脚本错误,添加指数行数等。

1 个答案:

答案 0 :(得分:0)

  • 选中“ 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时,您要删除与该行相对应的“ A”列的值。

如果我的理解是正确的,那么该修改如何?

发件人:

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)]);