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" 属性 以及适当的追加单元格请求数据:
- "sheetId":合适sheet ID;
- "rows":只有一行;
- "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。每个请求都应该转到它自己的新行。
我们正在使用 Google Sheets API v4 在 sheet 中获取和附加行。当同时发送多个行附加请求时会出现问题,例如4 个并发请求。有时这样的请求是交叉的,一些附加的行被另一个请求覆盖。例如,如果每个请求只有 1 行用于追加,并且同时发送 4 个这样的请求,则只会创建 3 行。在顺序请求的情况下不会出现此问题。是已知问题吗?是否有任何解决方法可以实现行不被并发追加请求覆盖?
为了发送追加请求,我们使用批量更新请求端点:
POST https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}:batchUpdate
批量更新请求的正文有 "appendCells" 属性 以及适当的追加单元格请求数据:
- "sheetId":合适sheet ID;
- "rows":只有一行;
- "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。每个请求都应该转到它自己的新行。