Получение "К сожалению, произошла ошибка сервера. Пожалуйста, подождите немного и попробуйте снова". Но только на одном листе

Итак, у меня есть (что я предполагаю) довольно длинный скрипт для автоматизации выдачи разрешений в Google Sheets. Чтобы это работало, мне нужно сначала удалить все редакторы, в противном случае Google просто помещает их в каждую категорию. Я не могу понять, как это остановить, если не считать их полного удаления.

В моем тестовом файле я являюсь владельцем. Хотя я предполагаю, что мне нужно добавить что-то, что добавит учетную запись участника сценария в качестве редактора, на всякий случай, если это не так. (отредактировано, чтобы добавить: Видимо, вы не можете удалить себя в качестве редактора, поэтому, даже если вы не являетесь владельцем, вы все равно можете запустить оставшуюся часть сценария. Спасибо, Google! ИЗМЕНЕНО ВНОВЬ: ЭТО ПОЛНАЯ ЛОЖЬ. Я связался с человеком, который сказал это, потому что они НЕПРАВИЛЬНЫ. Вы можете удалить себя, теперь я жду, когда владелец добавит меня обратно. 9__6)

Итак, я использую это:

  //removes all Editors
  var SpreadSheet = SpreadsheetApp.getActiveSpreadsheet();
  var editors = SpreadSheet.getEditors();
  for (var i = 0; i < editors.length; i++) {
     SpreadSheet.removeEditor(editors[i]);
    };

Который работал, в этом точном файле, каждый раз, когда я проверяю это. Вчера, однако, я получил эту ошибку:

"К сожалению, произошла ошибка сервера. Пожалуйста, подождите немного и попробуйте снова".

ссылаясь на эту строку конкретно:

  var editors = SpreadSheet.getEditors();

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

Есть ли лучший способ сделать это? Эти листы уже доступны, и ими поделились тысячи людей, поэтому мне нужно либо удалить их права на редактирование, либо переключить их тип редактирования на "просмотр".

(Я знаю, что вы можете сделать это для папок, но мне бы хотелось, чтобы это было специально для файла, поскольку в конечном итоге я не тот, кто владеет этими файлами и кто знает, как они были организованы.)

Спасибо за любую помощь!

....

23 октября 2016 года - это происходит снова, на разных листах. Я закомментировал все, и это определенно вызывает проблемы:

  //removes all Editors
  var SpreadSheet = SpreadsheetApp.getActiveSpreadsheet();
  var editors = SpreadSheet.getEditors();
  for (var i = 0; i < editors.length; i++) {
     SpreadSheet.removeEditor(editors[i]);
    };

GetEditors слишком много, чувак. Есть ли другой способ сделать это? Есть ли другой способ удалить редакторы или установить для них "только просмотр", а затем вернуться к "редактированию", когда я закончу?

(Если бы Google просто поместил только электронные письма в каждом диапазоне защиты, как я определил, вместо всех, у меня не было бы этой проблемы. Но они не будут, и я должен удалить всех, чтобы этот скрипт работал.)

Я уже просмотрел множество связанных ответов, и они, похоже, не ответили. Является ли getEditors слишком тяжелым для надежного использования?

Я на самом деле не сценарист и могу использовать любые ссылки или рекомендации, которые кто-либо может дать.

Я также не могу принять свой ответ как ответ...

отредактировано 14.11.2016 - Проблема сохраняется. В связанном ответе рассказывается об использовании "функции замены строк" ​​и о том, как изменился этот сценарий. Я не использую это. Остальная часть моего сценария является повторением этого типа вещи:

 //Sheet1
  var sh3 = ss.getSheetByName("Sheet1");
  var protection = sh3.protect().setDescription('Sheet1 - Wizards'); //protects whole sheet
  protection.addEditors(['wizard1@test.com', 
            'wizard2@test.com', 
            'wizard3@test.com']); 
//adds email addresses to WIZARD range

  var unprotected = sh3.getRange('A10:T');
  protection.setUnprotectedRanges([sh3.getRange("B3:B3"),
                                   sh3.getRange("C1"),
                                   sh3.getRange("B72:B72"),
                                   sh3.getRange("C2:K8"),
                                   sh3.getRange("A10:T70"),
                                   sh3.getRange("A75:Q")]); 
  //unprotects everything but frozen header. (unprotects the Sheet1 Legend too.)

  var range = sh3.getRange('C2:K8'); //selects the range
  var protection = range.protect().setDescription('Sheet1 - Legend'); //names the range
  var me = Session.getEffectiveUser();
  protection.addEditors(['wizard1@test.com', 
            'wizard2@test.com', 
            'wizard3@test.com' 
            'supervisor1@test.com’]); 
  //put Sheet1 supervisor emails here

  var range = sh3.getRange('C1'); //selects the range
  var protection = range.protect().setDescription('Sheet1 - Part Number'); //names the range
  var me = Session.getEffectiveUser();
  protection.addEditors(['wizard1@test.com', 
                         'wizard2@test.com', 
                         'wizard3@test.com' 
                         'supervisor1@test.com’]); 
  //put Sheet1 supervisor emails here

  var range = sh3.getRange('A10:T38'); //selects the range
  var protection = range.protect().setDescription('Sheet1 - worker 1'); //names the range
  var me = Session.getEffectiveUser();
  protection.addEditors(['wizard1@test.com', 
                     'wizard2@test.com', 
                     'wizard3@test.com', 
                     'lead1@test.com’,
                     'worker1@test.com',
                     'worker2@test.com']); 

  //put emails here - Sheet1 worker level

  var range = sh3.getRange('A43:Q'); //selects the range
  var protection = range.protect().setDescription('Sheet1 - Artists 2');       //names the range`
  var me = Session.getEffectiveUser();
  protection.addEditors(['wizard1@test.com', 
'wizard2@test.com', 
'wizard3@test.com' 
'lead1@test.com’
'worker1@test.com',
'worker2@test.com']); 

  //put emails here - Sheet1 worker level

... Боже, интервал такой, пожалуйста, игнорируйте это и любые запятые, которые я мог пропустить, пройдя. Мне нужно было быстро анонимизировать это, чтобы я мог опубликовать это. Фактический код расположен правильно и содержит все необходимые запятые.

Так что я делаю не так??? Почему Google волнуется из-за бита getEditors() и почему только в определенных листах??

Я видел где-то еще, что это просто универсальная ошибка: "Google не знает, что произошло, но это не сработало. Попробуйте позже, и, возможно, это сработает? Скрестив пальцы????"

Который расстраивает КАК ХЕК, потому что это совсем не причудливая функция.

29 ноября 2016 года. Сегодня у меня было несколько свободных минут, поэтому я решил попробовать этот сценарий еще раз. Все еще не работал.

Но, боже мой, я думаю, что взломал это! Это связано с настройками обмена! Когда файл был изначально создан, в качестве опции для общего доступа был выбран "любой, у кого есть ссылка".

Ну, я подумал, что это не дает достаточной безопасности, поэтому я переключил свой шаблон на "только определенные люди". Затем я удалил всех вручную, думая, что это может сработать.

Запустил это снова, это сработало.

Попробовал еще раз, не удаляя вручную, надеясь, что простое изменение настроек общего доступа будет работать. ЭТО СДЕЛАНО!!! Поэтому я отправился починить тот, который находился далеко внизу от трубопровода без защит.

Выходит, что вы МОЖЕТЕ удалить себя с помощью сценариев, хотя я где-то читал, что Google не будет этого делать. Итак, поскольку я не являюсь владельцем листа, я теперь заблокирован. Что будет другой проблемой, и другим вопросом.

Но как только я получу это имя или получу фактический владелец для запуска скрипта, я обновлю, если это действительно решило проблему.

Я буду намного счастливее, когда это сработает!

2 ответа

Публикуете ответ, потому что моя проблема исчезла? Я ничего не изменил, но я попробовал это сегодня утром, и это работает. Тот же лист, тот же код, без ошибки сервера.

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

Я просто буду молиться богам Google и надеюсь, что все в порядке. (Лучший план, г / у?)

Спасибо Rubén и noogui за их вклад.

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

У меня была похожая проблема, но вот что я обнаружил... в основном я ссылался на библиотеку, которая была либо удалена, либо я потерял права доступа. Поскольку я не использовал эту конкретную библиотеку, я удалил библиотеку, и теперь все мои листы снова работают.

Другие вопросы по тегам