Я пытаюсь понять, как получить данные из электронной таблицы, привязанной к сценарию, который упоминается как пакет в другом сценарии.
У меня есть электронная таблица с некоторыми данными и ограниченный скрипт с этой функцией:
function getIt()
{
return SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("A1").getValue();
}
Скрипт работает как положено.
Затем у меня есть автономный скрипт/проект, в который я добавил вышеуказанный скрипт в качестве библиотеки. В этом автономном скрипте, если я попытаюсь library.getIt()
, я получу ошибку:
TypeError: Cannot call method "getSheetByName" of null. (line 8, file "Code", project "Untitled project")
Что я хочу сделать, так это создать некоторые функции в скрипте, привязанном к листу, который получает/возвращает данные с листа. Затем я хочу иметь возможность добавить скрипт в качестве библиотеки к другим скриптам и получить указанные данные, вызвав эти функции.
Это возможно?
Вы не сможете getActiveSpreadsheet()
из отдельного скрипта, попробуйте вместо этого использовать openById()
или openByUrl()
.
Хотя ваш скрипт getIt()
привязан к электронной таблице, я полагаю, что он попытается запустить getActiveSpreadsheet()
для текущего файла скрипта, из которого вы его запускаете, который возвращает null
, потому что он не привязан ни к какой электронной таблице.
Так есть ли способ заставить «импортированный» пакет/библиотеку работать в контексте листа, к которому он привязан?
Попробуйте использовать getActive()
вместо getActiveSpreadsheet()
, я кое-что читал, и Google специально упомянул использование getActive()
в своем документация библиотек.
Хотя я не уверен, что это то направление, в котором вы хотите, например, когда используется Apps Script API, идентификатор файла Google Docs может быть получен из связанного сценария. Как насчет получения идентификатора файла Документов Google (идентификатор электронной таблицы) с помощью этого? Таким образом, электронная таблица связанного скрипта, который является библиотекой, может быть использована из скрипта, который установил библиотеку. Если это было не то направление, которое вы хотите, я извиняюсь.