Вот как я решил:
Вы не можете получить доступ к другим файлам электронных таблиц, что означает, что вы не можете использовать openById()
или openByUrl()
. Таким образом, есть только один метод, который вы можете достичь - используя getActiveSpreadSheet()
, которая является текущей электронной таблицей, к которой относится скрипт приложения.
Если вы хотите скрыть исходный файл, то вы можете сделать ссылку файл, который доступен для всех. И ваш оригинальный файл является личным.
Итак, вам нужно сделать еще один файл для совместного использования.
- оригинальный файл (частный)
Использование getactiveSpreadSheet()
вместо openById()
или openByUrl()
. И реализовать ваши пользовательские функции. У вас не возникнет проблем с доступом к текущей электронной таблице таким образом.
function YOUR_CUSTOM_FUNCTION(val1, val2, ...){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("YOUR_SHEET_NAME");
return getMyValue(val1, val2, ...);
}
function getMyValue(val1, val2, ...){
var result = 0;
// TODO: calculate values as you want.
return result;
}
Используйте свою пользовательскую функцию в файле следующим образом:
=YOUR_CUSTOM_FUNCTION(E5, F6, ...)
Вы не получите никаких ОШИБКА.
справочный файл (общий)
Вы можете создать справочный лист, используя:
=IMPORTRANGE("spread sheet link","sheet_name!range")
. Это покажет кнопку доступа для получения авторизации. После того, как вы нажмете, он будет ссылаться на исходный лист.
* диапазон - это что-то вроде A:C
или A1:Z55
.