在Google Sheets API v4中附加并发行

Concurrent rows appending in Google Sheets API v4

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

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

批处理更新请求的主体具有" appendCells"属性,并带有适当的附加单元格请求数据:

  • " sheetId":适当的工作表ID;
  • "行":仅一行;
  • "字段":" *"

  • 考虑将values.append API与InsertDataOption.INSERT_ROWS一起使用。每个请求应转到其自己的新行。


    尝试使用Google Apps脚本锁定服务。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    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();
      //}
    }