Предисловие
Этот ответ является дополнительным к ответу ziganotschka, поскольку вы действительно не можете получить доступ к скрипту, привязанному к документу, открыв указанный документ с помощью openById()
. Вместо этого ответ охватывает другие проблемы, которые у вас были, и предлагает дополнительные способы решения вашей задачи.
Проблема
При попытке использовать openById()
вы получаете сообщение об ошибке следующей структуры:
Исключение: отсутствует документ [do c id here] (возможно, он был удален или у вас нет прав на чтение?)
Вы упомянули в комментариях, что идентификатор равен 58 символам (я думаю, что это 57) и получен из "свойств", что объясняет ошибку - нет таблицы с таким идентификатором, потому что идентификатор файла и идентификатор скрипта вы извлекли не одно и то же. Если вам когда-нибудь понадобится программно извлечь current id (здесь предполагается, что он вызывается из сценария, привязанного к электронной таблице, но другие службы имеют аналогичные методы), вы можете вызвать getActiveSpreadsheet()
-> getId()
.
Решения
Вы заявили, что вам нужен сценарий maintenance , так как насчет создания автономного проекта сценария, который развертывается способом любой документ может иметь доступ:
в виде библиотеки
Любой сценарий с сохраненной версией может быть библиотекой, которая может быть используется другими сценариями путем добавления его идентификатора в список, доступный из меню Resources->Libraries
.
как веб-приложение
Любой сценарий, имеющий doGet
, * Функцию 1053 * (или обе) можно развернуть как веб-приложение, по сути, открыв для нее net. Поскольку вы сказали, что электронные таблицы "создаются" с помощью форм, и создали сценарий "уведомления", я предполагаю, что вы заинтересованы в событии FormSubmit
. При развертывании в качестве веб-приложения вы получаете url (не забудьте выбрать соответствующее разрешение ).
После этого остается только вопрос убедиться, что:
- каждая форма имеет устанавливаемый триггер
onFormSubmit
(вы можете установить его через [см. ссылки на документы] ScriptApp.newTrigger('callback name').forForm('form ref').onFormSubmit()
). - Обратный вызов для триггер вызывает URL-адрес веб-приложения через
UrlFetchApp.fetch()
с необходимыми данными (такими как идентификатор электронной таблицы или любая другая информация) как запрос (при использовании doGet
) или запрос body (при использовании doPost
). - Необходимые данные будут доступны в объекте события, построенном при попадании в
doGet
или doPost
[примечание, чтобы избежать распространенного заблуждения: вы не можете отлаживать объекты событий в редакторе , это может быть сделано только вживую].
Ссылка
getActiveSpreadsheet()
документы getId()
документы getFileById()
документы - автономные сценарии руководство
- связанные сценарии руководство
- Библиотеки путеводитель
- Событие отправки формы ссылка
new Trigger()
документы UrlFetchApp.fetch()
документы doGet
/ doPost
объект события документы