Google apps script 通过Google电子表格循环并检索单元格值的问题

Google apps script 通过Google电子表格循环并检索单元格值的问题,google-apps-script,Google Apps Script,我为任何愚蠢的问题提前道歉。。。我对JS和GoogleDocs中的脚本编写完全是新手 我正试图编写一些代码来删除google电子表格中第一列有“Received”或“Cancelled”字样的所有行 这是我目前的代码: function DeleteClosedRows() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var end = SpreadsheetApp.getActiveSheet().getLastRow(

我为任何愚蠢的问题提前道歉。。。我对JS和GoogleDocs中的脚本编写完全是新手

我正试图编写一些代码来删除google电子表格中第一列有“Received”或“Cancelled”字样的所有行

这是我目前的代码:

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); 
        };
    };  
};
函数DeleteClosedRows(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var end=SpreadsheetApp.getActiveSheet().getLastRow();
对于(变量i=3;i
当我尝试运行此操作时,会出现错误“单元格引用超出范围”

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

。。我确信我的代码有100处错误,但现在我想了解第一个问题,那就是阻止它通过那个部分


谢谢你的帮助

代码失败的原因是
.getActiveRange()
返回用户当前选择的单元格范围。这不是你想要的。相反,您需要从由单个单元格组成的工作表中获取一个范围。大概是这样的:

var value =  ss.getRange(i, 1).getValue();
带有两个参数的
.getRange
函数与您期望的
.getCell
完全相同

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

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


两个链接答案也解释了这一点:

与您的问题无关,但您需要将
&
更改为
|
。这将更改和或。您需要检查值是否“已接收”或值是否“已取消”。如果在一个循环中调用并处理整个范围的单元格,正如Phil指出的那样,那么是否可能要求循环向后运行,例如:for(var i=rangeValues.length-1;i>0;i--)这样,当您在循环期间删除一行时,它不会影响尚未覆盖的剩余循环的长度;因此,可以安全地使用循环中的i变量来对应我们要删除的deleteRows(i)中的i(否则,删除的第二行和后续行将不是预期的行)说得好。当我键入这个答案时,我忘了目标是删除行。感谢您的澄清!@Phil,非常感谢您的帮助。.向这个论坛介绍这是一个非常好的方式。我做了您建议的更改,所以现在这行内容为:var value=ss.getRange(I,1).getValue();但现在我遇到了一个错误:找不到方法(类)getRange(number,number)。一旦我弄明白了这一部分,我将返回并尝试使用getValues来提高代码的效率。再次感谢您的帮助!看起来您需要做此更改。
var ss=SpreadsheetApp.getActiveSheet()
注意这里的区别。@Phil,非常感谢..它很有效!但是正如你提到的,它相当慢。我将尝试使用.getValues实现你的解决方案(如果我理解正确,我将把所有单元格值拉入一个数组,然后在数组中循环并删除与数组索引具有相同行号的行)…我会让您知道它是如何进行的!