Apps Script, который читает электронную почту пользователя и возвращает информацию из электронной таблицы
Я пытаюсь создать сценарий для размещения на своем сайте Google для своих учеников, чтобы они могли найти свои данные для входа на сайт из мира. У меня есть электронная таблица со всеми их электронными письмами, которые совпадают с их регистрационными данными, но когда они получают доступ к странице, я хочу, чтобы я мог видеть только их строку. Я использую Session.getActiveUser(). GetEmail() для этого, и весь мой код приведен ниже, но он не работает!
Любая помощь будет принята с благодарностью.
var userID = Session.getActiveUser().getEmail();
var userLogin;
var userPass;
var userName;
var text;
//Function to lookup login and password from email and add to variables
function lookup() {
var spreadsheetKey = '1UftMLEgJPof3533X1Dp2IRqLIJa-70y8m-xnbyfj8ZA';
var sheet = SpreadsheetApp.openById(spreadsheetKey);
var end = SpreadsheetApp.getActiveSheet().getLastRow();
var range = sheet.getRange(1, 0, end, 4);
var values = range.getValues();
for (i = 0; i < values.length; ++i) {
if (values[i][0] == userID) {
text = 'Here are your login details for MyMaths. Now get on with your homework!'
userName = string(values[i][1]);
userLogin = string(values[i][2]);
userPass = string(values[i][3]);
}
else {
text = 'Sorry, but there is an error. You will need to check in your book or ask your teacher for your MyMaths login details.'
}
}
}
//Function to create Userinterface on site page
function doGet() {
var app = UiApp.createApplication();
var panel = app.createAbsolutePanel();
var label = app.createLabel(text);
var table = app.createGrid(2,3);
table.setText(0, 0, 'Name');
table.setText(0, 1, 'Login');
table.setText(0, 2, 'Password');
table.setText(1, 0, userName);
table.setText(1, 1, userLogin);
table.setText(1, 2, userPass);
panel.add(label);
panel.add(table);
app.add(panel);
return app;
}
1 ответ
То, как вы это реализовали, не сработает. Вы определили ряд переменных как "глобальные", чтобы каждая функция могла их использовать, но, хотя это так, функции не смогут их изменять..., другими словами: они не могут присваивать значение этим переменным.
Я бы предложил построить это совершенно по-другому: основной doGet, который будет вызывать функцию поиска, последняя возвращает соответствующие значения (в виде массива или объекта).
Код выглядит следующим образом, я не тестировал его, потому что у меня не было данных для этого, но он должен работать как положено.
Кстати, подумайте об использовании некоторых стилей, чтобы это выглядело лучше:-) посмотрите эту статью от Anees Hameed, показывающую умный способ сделать это.
//Function to create Userinterface on site page
function doGet() {
var userID = Session.getEffectiveUser().getEmail();
var result = lookup(userID);
var app = UiApp.createApplication();
var panel = app.createAbsolutePanel();
var label = app.createLabel(result.text);
var table = app.createGrid(2,3);
table.setText(0, 0, 'Name');
table.setText(0, 1, 'Login');
table.setText(0, 2, 'Password');
table.setText(1, 0, result.userName);
table.setText(1, 1, result.userLogin);
table.setText(1, 2, result.userPass);
panel.add(label);
panel.add(table);
app.add(panel);
return app;
}
function lookup(userID) {
var result = {};
var spreadsheetKey = '1UftMLEgJPof3533X1Dp2IRqLIJa-70y8m-xnbyfj8ZA';
var sheet = SpreadsheetApp.openById(spreadsheetKey);
var end = SpreadsheetApp.getActiveSheet().getLastRow();
var range = sheet.getRange(1, 0, end, 4);
var values = range.getValues();
for (i = 0; i < values.length; ++i) {
if (values[i][0] == userID) {
result['text'] = 'Here are your login details for MyMaths. Now get on with your homework!'
result['userName'] = string(values[i][1]);
result['userLogin'] = string(values[i][2]);
result['userPass'] = string(values[i][3]);
}
else {
result['text'] = 'Sorry, but there is an error. You will need to check in your book or ask your teacher for your MyMaths login details.'
result['userName'] = '-';
result['userLogin'] = '-';
result['userPass'] = '-';
}
}
return result;
}