处理Google表格中的比赛条件

时间:2018-08-22 07:11:30

标签: django concurrency google-sheets-api gspread

我正在使用gspread库通过python访问和编辑Google表格。当可能有多个工作人员在同一张纸上书写时,是否有一种很好的方法来处理竞争条件(不一定只使用gspread)。

我使用的是Django服务器,该服务器将接受编辑或更新工作表的请求,以防万一出现多个请求,我是否可以使用某种锁定机制,以便一次只有一名工作人员访问工作表,而其他人将继续等待当先前的工作人员完成工作表的编辑时,获取锁并获得访问权限。

1 个答案:

答案 0 :(得分:0)

您可以使用Class Protection来访问和修改受保护的范围和表格。还报告为feature request(固定)。

  

受保护范围可以保护单元格的静态范围或命名范围。受保护的工作表可能包含不受保护的区域。

     

保护范围A1:B10,然后从编辑器列表中删除所有其他用户。

SqlSessoin
     

在删除其他用户之前,请确保当前用户是编辑器。否则,如果用户的编辑权限来自某个组,则脚本在删除该组时会引发异常。

var ss = SpreadsheetApp.getActive();
var range = ss.getRange('A1:B10');
var protection = range.protect().setDescription('Sample protected range');
     

删除电子表格中用户有权编辑的所有范围保护。

var me = Session.getEffectiveUser();
protection.addEditor(me);
protection.removeEditors(protection.getEditors());
if (protection.canDomainEdit()) {
  protection.setDomainEdit(false);
}
     

保护活动工作表,然后从编辑器列表中删除所有其他用户。

   var ss = SpreadsheetApp.getActive();
    var protections = ss.getProtections(SpreadsheetApp.ProtectionType.RANGE);
    for (var i = 0; i < protections.length; i++) {
      var protection = protections[i];
      if (protection.canEdit()) {
        protection.remove();
      }
    }
     

在删除其他用户之前,请确保当前用户是编辑器。否则,如果用户的编辑权限来自某个组,则脚本在删除该组时会引发异常。

var sheet = SpreadsheetApp.getActiveSheet();
var protection = sheet.protect().setDescription('Sample protected sheet');