Скрипт работает с листа, а не как аддон с таким же кодом

Проект публикуется как надстройка для Таблиц. Доверенный тестировщик (также редактор электронных таблиц) запускает надстройку, но она не работает. Он получает сообщение «У вас нет доступа для выполнения этого действия. Попросите владельца этого элемента предоставить вам доступ». Если редактор запускает встроенный скрипт в той же таблице с тем же кодом, то все работает.

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sName = ss.getName();
var eds = ss.getEditors();
var owner = eds[0];
var ed = eds[1];
var sheet = ss.getSheetByName("Task");
var emailAddress = owner.getEmail();
var subject = "Done! - " + sName;
var localDate = Date();
sheet.getRange(12, 2, 1, 1).setValue(localDate);
var values = sheet.getRange("B2:K11").getValues();
var message = "#" + values + "#" + localDate + "#";
MailApp.sendEmail(emailAddress, subject, message);
ss.removeEditor(ed);

Посоветуйте, пожалуйста, куда копать.


person Boris Baublys    schedule 30.09.2018    source источник
comment
ошибка исходит от MailApp.sendEmail()?   -  person JSmith    schedule 30.09.2018
comment
Эта ошибка почти наверняка возникает из-за строки, которая изменяет список редакторов электронной таблицы.   -  person tehhowch    schedule 30.09.2018
comment
@JSmith Я удалил строки из remEditor.js: MailApp.sendEmail (адрес электронной почты, тема, сообщение); Изменил номер версии в manifest.json. Снова запаковал в zip архив и выложил в магазин. Я проверил, обновилась ли редакционная версия надстройки - да, обновилась. Редактор запустил аддон и получил ту же ошибку.   -  person Boris Baublys    schedule 30.09.2018
comment
@tehhowch После этого удалил строчки: ss.removeEditor (ed); sheet.getRange (12, 2, 1, 1) .setValue (localDate); и повторил все манипуляции. Редактор запустил аддон и снова получил ту же ошибку. Так дело не в активных операциях с листом и правами?   -  person Boris Baublys    schedule 30.09.2018
comment
@BorisBaublys, извините, попробуйте этот `try {/ * yourCode; * /} catch (e) {Browser.msgBox (e.message + line: + e.lineNumber)})   -  person JSmith    schedule 30.09.2018
comment
@JSmith Я обернул свой код в try ... catch, как вы предложили, и все сработало! MsgBox не появился, но надстройка выполнила все функции: вставила текущую дату, отправила письмо, отозвала права редактора. Я не понимаю, в чем дело. У вас есть догадки? В любом случае, благодарю Вас. Ответьте на вопрос, и я отмечу его.   -  person Boris Baublys    schedule 30.09.2018
comment
@BorisBaublys done только что ответил на ваш вопрос, кстати, если он сработал, то нормальный msgBox не запускается. очень странно.   -  person JSmith    schedule 30.09.2018
comment
@JSmith Извините, я понял, почему это сработало. В электронную таблицу, права на которую предоставлены редактору, встроен код, и имя функции в ней такое же, как и в надстройке. Таким образом, редактор, нажав на кнопку, запускал функцию не из надстройки, а из встроенного скрипта. Так что вопрос остается открытым.   -  person Boris Baublys    schedule 30.09.2018
comment
@BorisBaublys показывал ли msgBox, когда в редакторе была ошибка?   -  person JSmith    schedule 30.09.2018
comment
@JSmith нет, только красное сообщение У вас нет доступа для выполнения этого действия. Попросите владельца этого объекта предоставить вам доступ.   -  person Boris Baublys    schedule 30.09.2018
comment
@BorisBaublys - это единственный код, который у вас есть, или есть еще?   -  person JSmith    schedule 01.10.2018
comment
@JSmith Другого кода в таблице нет (Был, но я удалил, чтобы не путать). Кнопке назначен скрипт из надстройки. Поменял сейчас публикацию дополнения - не для проверенных тестировщиков, а по ссылке - ошибка осталась на месте.   -  person Boris Baublys    schedule 01.10.2018
comment
@JSmith Попутно вопрос: смотрю manifest.json, там почему-то указан ID контейнера. Это нормально? Я создал аддон на основе несвязанного скрипта.   -  person Boris Baublys    schedule 01.10.2018
comment
@BorisBaublys, извините, не могу вам с этим помочь. Я однажды сделал файл манифеста, но это было давно.   -  person JSmith    schedule 01.10.2018
comment
Если вопрос открыт, вы можете отказаться от ответа и отредактировать свой вопрос, чтобы добавить все свои комментарии и ваши усилия. . Предоставьте минимальный воспроизводимый пример.   -  person TheMaster    schedule 01.10.2018
comment
Расскажите, пожалуйста, о том, как ваш тестер запускает надстройку. Предоставьте полный код.   -  person TheMaster    schedule 01.10.2018
comment
@I '-' Я назначил скрипт (remEditor) кнопке на листе. Вот ссылка на надстройку, полный код находится в описание.   -  person Boris Baublys    schedule 01.10.2018
comment
@I '-' I Вы правы, вопрос открытый. Я поспешил радоваться. Если появится правильный ответ, я его приму. Если нет, пусть будет так.   -  person Boris Baublys    schedule 01.10.2018


Ответы (1)


Установка надстройки не предоставляет все разрешения надстройке. Его тоже нужно включить. Опубликованные надстройки запускаются в AuthMode.NONE, если они не включены. Попробуйте сначала добавить пункт меню и запустить в нем функцию, чтобы включить ее в документ.

person TheMaster    schedule 01.10.2018
comment
Спасибо! Я уже проверил, установлен / включен и попробовал опцию меню на своем листе. Однако для чистоты эксперимента я снова проделал то же самое с только что созданным документом. Вот что произошло - person Boris Baublys; 02.10.2018
comment
Код @Boris onOpen должен быть в аддоне ... Пункты меню должны находиться в главном меню аддонов .... - person TheMaster; 02.10.2018
comment
Ой, вот в чем дело! Должен ли я вызывать функцию аддона из меню? Спасибо, что указали на мою ошибку. Но я не хотел пользоваться меню. На мобильных телефонах меню менее удобно, чем кнопка. Кнопку можно сделать очень большой, но я не знаю, как изменить размер меню. По вашему совету создал новый аддон - добавил в код onInstall, onOpen, createAddonMenu. Вот ссылка на надстройку, полная код - в описании. Работает, еще раз спасибо! - person Boris Baublys; 02.10.2018
comment
И еще, может есть способ запустить код надстройки с кнопки? Меню и боковая панель на мобильном телефоне менее удобны, чем кнопка. Есть еще один недостаток для пользователя. Несмотря на то, что он редактор, ему необходимо переустановить аддон, хотя он уже установлен владельцем. Можно ли этого избежать? - person Boris Baublys; 02.10.2018
comment
И все же перед этим я внес в аддон следующие изменения: я изменил код в remEditor.js и номер версии в manifest.json, заархивировал пакет и загрузил zip-файл в Chrome Store. Так что можно? Все остальное в манифесте не меняется, если обновить редактор через Скрипт? Мне пришлось это сделать, потому что я не нашел способа установить номер версии типа 0.0.0.1 в управлении версиями в редакторе скриптов. Это только цифры 1, 2 и т.д. Также в редакторе скриптов нет manifest.json, вместо него есть appsscript.json ... Извините за кучу вопросов :-) - person Boris Baublys; 02.10.2018
comment
@Boris Привет ... Лучше задать другой вопрос. Как сделать надстройку с кнопки? . Мобильные телефоны не поддерживают кнопки, меню или диалоговые окна. Итак, большинство ваших опасений бессмысленно. Они поддерживают только триггеры onEdit (). Или нужно написать отдельную надстройку для андроида. - person TheMaster; 02.10.2018
comment
Привет, я последовал твоему совету, спасибо и задал отдельный вопрос Как запустить дополнительную функцию с кнопки на листе?. Буду признателен за ваши идеи по этому поводу. - person Boris Baublys; 03.10.2018
comment
@Boris Мне нечего добавить, кроме приведенного выше комментария. Я просил вас задать новый вопрос для более широкой аудитории и взглядов. И последнее, что я хотел бы добавить, это то, что я бы использовал функцию onEdit для мобильных устройств. Создайте раскрывающийся список проверки данных в ячейке вместо кнопки (скажем, вариант _1 _, _ 2_ с увеличенным размером шрифта, скажем, 72). Если параметр изменится, вы получите срабатывание триггера onEdit. Честно говоря, я не думаю, что кто-то будет переходить на рабочий стол на мобильном устройстве Chrome, если у него нет другого выбора (у них есть приложение). Установить приложение удобнее, чем перейти в режим рабочего стола в мобильном телефоне. - person TheMaster; 03.10.2018