0

对于任何愚蠢的问题,我提前道歉......我对 JS 和 Google Docs 中的脚本完全陌生。

我正在尝试编写一些代码来删除谷歌电子表格中第一列中包含“已接收”或“已取消”字样的所有行。

这是我当前的代码:

function DeleteClosedRows() {

    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var end = SpreadsheetApp.getActiveSheet().getLastRow();
    for( var i = 3; i < end + 1; ++i ) {
        var value =  ss.getActiveRange().getCell(i, 1).getValue();
        if (value === "Received" && value === "Canceled") {
            sheet.deleteRows(i); 
        };
    };  
};

当我尝试运行它时,我收到错误“单元格引用超出范围”

当我查看执行记录时,它说最后采取的行动是: Range.getCell([3, 1])

.. 我确定我的代码有 100 处错误,但现在我很想了解第一个阻止它通过该部分的问题。

谢谢你的帮助!

4

1 回答 1

1

您的代码失败的原因是.getActiveRange()返回用户当前选择的单元格范围。这不是你想要的。相反,您将希望从包含单个单元格的工作表中获取一个范围。像这样的东西:

var value =  ss.getRange(i, 1).getValue();

.getRange有两个参数功能完全符合您的预期.getCell

注意:当您调用 时.getRange,您可以获得整个范围的单元格(就像您可以在电子表格中选择多个单元格一样。然后当您调用 时.getValue,您将获得该范围内第一个单元格的值。

性能注意事项:您可以通过调用一次检索整个单元格范围的值.getValues。这将返回一个包含所有值的二维数组。这比一次获取一个单元格的值要快得多。

几个链接的答案也解释了这一点:Link 1 Link 2

于 2013-02-25T21:30:25.220 回答