我想保存服务器调用,并尝试在其他操作之前将工作表加载到内存中:
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
来计算范围。但是如果您想手动定义一个范围对象,那么length
和getLastRow
可能会给出不同的结果!