Google Sheets API v4 中附加的并发行

Concurrent rows appending in Google Sheets API v4

我们正在使用 Google Sheets API v4 在 sheet 中获取和附加行。当同时发送多个行附加请求时会出现问题,例如4 个并发请求。有时这样的请求是交叉的,一些附加的行被另一个请求覆盖。例如,如果每个请求只有 1 行用于追加,并且同时发送 4 个这样的请求,则只会创建 3 行。在顺序请求的情况下不会出现此问题。是已知问题吗?是否有任何解决方法可以实现行不被并发追加请求覆盖?

为了发送追加请求,我们使用批量更新请求端点:
POST https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}:batchUpdate

批量更新请求的正文有 "appendCells" 属性 以及适当的追加单元格请求数据:

  1. "sheetId":合适sheet ID;
  2. "rows":只有一行;
  3. "fields": "*"

尝试 google 应用程序脚本锁定服务。

function appendRow_(row) {
  // The try / catch statement can be uncommented

  //try {
    var lock = LockService.getPublicLock();
    lock.waitLock(10000);

    Do something

    // Post form results with empty responses in order of item index
    s.appendRow(row);
    lock.releaseLock();
  //} 

  //catch (error) { 
     //Insert your own error handling
     //Logger.log(error);
  //}

  //finally { 
    //lock.releaseLock();
  //}
}

考虑使用 values.append API with InsertDataOption.INSERT_ROWS。每个请求都应该转到它自己的新行。