Apps脚本将新行和值插入Google表格。但是,如果提交速度太快,它将以某种方式跳过行

时间:2019-06-11 18:09:56

标签: google-apps-script google-sheets google-sheets-api

我有一个服务器端应用程序脚本,该脚本将新行插入Google表格中,然后将数据添加到相应的列中。这是它的简短代码片段:

//check to see what is the last row of the sheet
var last_row = sheet.getLastRow();


//then, insert a new row after the last detected row
sheet.insertRowAfter(last_row);

//then, set current work row to last_row + 1, then do some adding data. 
//Here, we add a current_timedate Date object that was created earlier.
var current_row = last_row + 1;
var current_timedate_cell = 'A' + current_row;
sheet.getRange(current_timedate_cell).setValue(current_timedate);

这都是非常标准的东西。但是,我注意到,如果我从前端接口调用可以很快完成所有操作的函数(我有另一个客户端javascript / html接口,通过按钮上的onClick方法调用服务器端javascript函数),它将开始跳过行。似乎还存在一些奇怪的并发问题。实际上,有些行插入了部分数据,但仅适用于我要添加的复选框。没有其他东西被添加。由于所有数据都是重复的,因此我无法确定行之间是否存在数据混合。因此,我无法确定第2行的H列是否现在在第3行的H列中,依此类推...公平地说,我每行插入一个大单元格,最大字符数为50k。因此,每一行可能接近50k。那可能是导致这些问题的原因

谁能提供一些见解?我知道Google表格不应该是具有ACID完整性和并发性能的关系数据库。但是,我认为这样做可以更好地处理50kb插入。

我已经尝试了SpreadsheetApp.flush()。我对速率限制有所了解,也许就是这样。有时我以大约每秒3次插入的速度进行插入。我将仔细检查配额率限制。但是,3 /秒似乎并不高。

预期结果:将插入所有要插入的数据 实际结果:以更快的插入率跳过了许多行

我正在try / catch块中完成所有这些操作,到目前为止,我还没有抛出任何错误。如果出现错误,我将其记录在Logger中,然后通过MailApp通过电子邮件发送给自己。

1 个答案:

答案 0 :(得分:1)

因为它回答了问题,所以将其添加为答案而不是评论:

为此,请使用appendRow()而非insertRowAfter()