【问题标题】:Apps Script that reads email of user and returns information from spreadsheet读取用户电子邮件并从电子表格返回信息的 Apps 脚本
【发布时间】:2014-09-07 18:07:05
【问题描述】:

我正在尝试为我的学生制作一个脚本来放在我的 google 网站上,以便他们可以在家中查找 mymaths 的登录详细信息。我有一个电子表格,其中包含与他们的登录详细信息相匹配的所有电子邮件,但是当他们访问该页面时,我希望能够看到他们的行。我为此使用 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;
}

【问题讨论】:

    标签: google-apps-script google-sheets google-apps-for-education


    【解决方案1】:

    你实现它的方式行不通。您将许多变量定义为“全局”,以便每个函数都可以使用它,但尽管这是真的,但函数将无法修改它们……换句话说:它们不能为这些变量赋值。

    我建议以完全不同的方式构建它:调用查找函数的主 doGet,后者返回适当的值(作为数组或对象)。

    代码是这样的,我没有测试它,因为我没有数据可以这样做,但它应该可以按预期工作。

    顺便说一句,考虑使用一些样式让它看起来更漂亮 :-) 请参阅 this post from 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;
    }
    

    【讨论】:

    • 请注意,我们可以对对象属性使用更简单的表示法,而不是 result['text']=... 我们可以写 result.text=... 我只是发现它更清楚,但之后也许不是:-)
    猜你喜欢
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多