0

生徒が自宅から mymaths のログイン情報を検索できるように、生徒用に 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;
}
4

1 に答える 1

0

これを実装した方法は機能しません。各関数が使用できるように、いくつかの変数を「グローバル」として定義しましたが、これは事実ですが、関数はそれらを変更できません...つまり、これらの変数に値を割り当てることはできません。

これをまったく別の方法で構築することをお勧めします。ルックアップ関数を呼び出すメインの 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;
}
于 2014-09-07T19:04:36.513 に答える