У меня есть скрипт приложения ( здесь , если вы хотите поиграть с ним), который обращается к электронной таблице. Для MOST все, что он делает, это читает лист ...
Однако ...
Я хочу позволить пользователям хранить некоторые данные. По сути, у меня есть скрипт, который выбирает их адреса электронной почты и использует их для создания страницы в моей электронной таблице ...
К сожалению, конечно, для этого требуется предоставить им доступ на чтение / запись к листу ... и в интересах защиты данных пользователей, я бы предпочел этого не делать.
Но возможно ли и то и другое:
- Расширение доступа на чтение / запись (для листа) к самому моему приложению, БЕЗ обнародования листа, И
- Все еще есть доступ к адресу электронной почты пользователя?
Вещи, которые я изучил в этом процессе:
- Я не могу получить доступ к адресу электронной почты пользователя, если разверну приложение для запуска от своего имени.
- ключ API полезен только для открытых данных
Я инициализирую страницы в моей процедуре doGet. Я упаковал получение имени пользователя и связанных с ним листов в функцию, чтобы можно было легко менять местозаполнители для адресов электронной почты во время тестирования. Следующий код отлично работает для меня, так как я авторизованный пользователь:
function doGet(e) {
if (!e.parameter.page) {
var userCrewSheetName = getUserSheetName();
var userCrewSheet = activeSpreadsheet.getSheetByName(userCrewSheetName);
initializeSheet(userCrewSheet,userCrewSheetName);
var userBonusSheetName = getUserSheetName("bonus");
var userBonusSheet = activeSpreadsheet.getSheetByName(userBonusSheetName);
initializeSheet(userBonusSheet,userBonusSheetName);
return HtmlService.createTemplateFromFile('test').evaluate();
}
return HtmlService.createTemplateFromFile(e.parameter['page']).evaluate();
}
function initializeSheet(sheet,sheetName) {
if(sheet == null) {
sheet = activeSpreadsheet.insertSheet();
sheet.setName(sheetName);
setHeaders(sheet,sheetName);
}
}
function getUserSheetName(sheetType) {
var userName = Session.getActiveUser().getEmail();
if (!userName) { return };
if(sheetType == "bonus") {
return userName + '_my_bonus';
} else {
return userName + '_my_crew';
}
return "error";
}