Обработка состояния гонки в Google Sheets

Я использую библиотеку Gspread для доступа и редактирования листов Google через Python. Есть ли хороший способ справиться с условиями гонки (не обязательно используя только grald), когда на одном листе могут писать несколько рабочих.

Я использую сервер Django, который будет принимать запросы на редактирование или обновление листа, в случае, если поступает несколько запросов, могу ли я использовать какой-либо механизм блокировки, чтобы у меня был только один работник, обращающийся к листу за раз, в то время как другой будет продолжать ждать получения заблокировать и получить доступ, когда предыдущие работники закончили редактирование листа.

1 ответ

Вы можете использовать Класс защиты для доступа и изменения защищенных диапазонов и листов. Также сообщалось как запрос функции (исправлено).

Защищенный диапазон может защищать либо статический диапазон ячеек, либо именованный диапазон. Защищенный лист может содержать незащищенные области.

Защитите диапазон A1:B10, затем удалите всех остальных пользователей из списка редакторов.

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');

Убедитесь, что текущий пользователь является редактором, прежде чем удалять других. В противном случае, если пользовательское разрешение на редактирование приходит из группы, сценарий выдает исключение при удалении группы.

var me = Session.getEffectiveUser();
protection.addEditor(me);
protection.removeEditors(protection.getEditors());
if (protection.canDomainEdit()) {
  protection.setDomainEdit(false);
}
Другие вопросы по тегам