我正在使用gspread库通过python访问和编辑Google表格。当可能有多个工作人员在同一张纸上书写时,是否有一种很好的方法来处理竞争条件(不一定只使用gspread)。
我使用的是Django服务器,该服务器将接受编辑或更新工作表的请求,以防万一出现多个请求,我是否可以使用某种锁定机制,以便一次只有一名工作人员访问工作表,而其他人将继续等待当先前的工作人员完成工作表的编辑时,获取锁并获得访问权限。
答案 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');