首页 > 解决方案 > 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();

但网络控制台指出:

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

getLastRow()是否仅适用于工作表,不适用于其他数据数组?

我无法在文档中得到明确的答案。

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

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


问题:

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

您正在尝试应用于getLastRow()2DJavaScript数组:[[x1,y1],[x2,y2]]这就是您收到getLastRow无法应用于JavaScript数组的消息的原因。

解决方案:

你有两个选择:

  • 使用内置JavaScript数组方法length onallSheetData来获取此数据数组占用的“行数”:

    var lastRow = allSheetData.length;
    
  • 应用于对象getLastRowsheet

    var lastRow = sheet.getLastRow();
    

请注意:

确保了解getLastRow()返回的内容是工作表中包含内容的最后一行。

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


推荐阅读