GAS: getLastRow()只对表有效,而不是数组?



我想保存服务器调用,并尝试在其他操作之前将工作表加载到内存中:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Condo1"); 
var allSheetData = sheet.getDataRange().getValues();  // load all sheet data into memory
var lastRow = allSheetData.getLastRow();

但是web控制台显示:

Error   TypeError: allSheetData.getLastRow is not a function
at [unknown function](Code:9:28)
getLastRow()

只适用于表,不适用于其他数组的数据?我在文档中找不到明确的答案。

在帮助getLastRow() -谢谢马里奥!-我仍然对基本目标感到困惑,以最小化服务器调用。我做了一个类似的脚本,其中我对由于调用每行而导致的长时间执行感到恼火,特别是在较长的表中。现在我想做得更好,在本地操作这个表。我相信有很多类似的问题,所以谷歌应用程序脚本,如果我只能得到一个很好的搜索词。异步批量请求"并没有给我很好的点击。然后我可以从自学开始。谢谢你!

Issue:

正如你在官方文档中看到的,getLastRow是一个应用于工作表对象的函数。

您正在尝试将getLastRow()应用于2DJavaScript数组:[[x1,y1],[x2,y2]],这就是为什么您收到getLastRow不能应用于JavaScript数组的消息。

解决方案:

你有两个选择:

  • allSheetData上使用内置的JavaScript数组方法length来获取"行"该数据数组占用:

    var lastRow = allSheetData.length;
    
  • sheet对象上应用getLastRow:

    var lastRow = sheet.getLastRow();
    

请注意:

确保理解getLastRow()返回的内容,即工作表中具有内容的最后一行。

在您的情况下,您正在使用getDataRange,它隐含地使用getLastRow来计算范围。但是如果您想手动定义一个范围对象,那么lengthgetLastRow可能会给出不同的结果!

最新更新