onSelectionChange поврежден после совместного использования файла

#google-apps-script

#google-приложения-скрипт

Вопрос:

В Google таблицах скрипт, использующий onSelectionChange, указывает, что при выборе листа «Лист 3» он перейдет на лист «Лист 2» и запишет что-то в ячейку E1. Это работает до тех пор, пока вы не поделитесь им или не измените часть кода. Затем он выполняет только часть работы: он пишет на листе «Лист 2! E1′ но не выходит из «Листа 3» и не показывает «Лист 2». Если вы закроете файл и повторно введете его, он не будет исправлен (обычно мне приходится делать это, чтобы заставить его работать при первом использовании onSelectionChange для файла). НО если вы создадите копию измененного файла, эта копия, которая использовалась, будет нормально работать вместе с изменениями. Что я должен сделать, чтобы onSelectionChange не был нарушен?

 function onSelectionChange(e){
  const sheetName = e.range.getSheet().getSheetName();
  if(sheetName=='Sheet 3'){
    change1();
  }
}

function change1() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Sheet 2'), true);
  spreadsheet.getRange('E1').activate();
  spreadsheet.getCurrentCell().setValue('You are not Allowed');
};
 

Комментарии:

1. Основная проблема заключается в том, что onSelectionChange — это простой триггер, и он не может выполнять операции, требующие разрешения, такие как получение пользовательских электронных писем. Для этого нет устанавливаемых триггеров, так что обходного пути нет.

2. Спасибо за ваш комментарий, Купер! Я меняю код, как вы можете видеть, но, к сожалению, ошибка сохраняется. Он записывается в «Лист 2! E1», но не меняет вид на «Лист 2» или активную ячейку E1. Это работает у меня в первый момент, но оно повреждается, когда я пишу что-то новое в функции change1, и это не восстанавливается, даже если я удаляю изменения. Есть какие-нибудь идеи?

Ответ №1:

  • При запуске функции Apps Script автоматически предоставляет ей необходимые области.
  • Вы можете проверить области, которые использует ваш скрипт, перейдя File->Project-> Properties в устаревший редактор или Overview-> Project OAuth Scopes в новый редактор — смотрите Здесь
  • Если вы удалите запрос, для которого требуется определенная область, из своего кода и сохраните сценарий — сценарий приложений не будет автоматически удалять избыточные области
  • Если ваш скрипт содержит области, которые нельзя использовать с простым триггером — ваш триггер приведет к ошибке

Решение:

  • Удалите избыточные области, установив необходимые области вручную в манифесте, как описано здесь

Примечание:

  • Будьте осторожны с именами листов — Sheet 3 это не то же самое, что Sheet3 .
  • Если при выполнении скрипта возникают ошибки — просмотрите выполнение скрипта, чтобы увидеть точное сообщение об ошибке для отладки.

ОБНОВЛЕНИЕ 02/02/21

На данный момент есть ошибка с onSelectionChange . Если вы затронуты, укажите его star в системе отслеживания проблем Google, чтобы повысить видимость.

Комментарии:

1. В областях OAuth проекта есть это: просмотр, редактирование, создание и удаление электронных таблиц на Google Диске googleapis.com/auth/spreadsheets Просмотр вашего адреса электронной почты https://…/auth/userinfo.email и в appsscript.json нет никаких «oauthScopes»: [ … В любом случае, у меня нет электронной почты, включенной в код onSelectionChange (это в другой функции). С другой стороны, я создал новый одинаковый код для onEdit и для onSlectionChange, и он отлично работает только для onEdit. То есть с помощью onEdit он изменяет лист и записывает, но с onSelectionChange он только записывает. Чего мне не хватает?

2. В настоящее время существует новая ошибка с onSelectionChange триггером. Вероятно, это причина вашей проблемы.

3. Следуя вашему предложению, я добавил звездочку, а также прокомментировал ошибку в системе отслеживания проблем Google. Спасибо ziganotschka!!