12

現在のユーザーの名前を特定して、誰が次のように編集したかをメモしようとしています:

  r.setComment("Edit at " + (new Date()) + " by " + Session.getActiveUser().getEmail());

しかし、それは機能しません - ユーザーの名前は空の文字列です。どこで私は間違えましたか?

4

4 に答える 4

18

朗報: この回避策で可能です!

ドキュメントのユーザーと所有者を明らかにする保護機能を使用しており、パフォーマンスを向上させるためにプロパティに保存しています。それを楽しんでください!

function onEdit(e) {
  SpreadsheetApp.getUi().alert("User Email is " + getUserEmail());
}

function getUserEmail() {
  var userEmail = PropertiesService.getUserProperties().getProperty("userEmail");
  if(!userEmail) {
    var protection = SpreadsheetApp.getActive().getRange("A1").protect();
    // tric: the owner and user can not be removed
    protection.removeEditors(protection.getEditors());
    var editors = protection.getEditors();
    if(editors.length === 2) {
      var owner = SpreadsheetApp.getActive().getOwner();
      editors.splice(editors.indexOf(owner),1); // remove owner, take the user
    }
    userEmail = editors[0];
    protection.remove();
    // saving for better performance next run
    PropertiesService.getUserProperties().setProperty("userEmail",userEmail);
  }
  return userEmail;
}
于 2016-10-30T13:24:05.300 に答える
7

このコードは、onEdit関数 (または on edit トリガー) 内で実行するように設定されていると思います。

コンシューマ アカウントを使用している場合は、Session.getActiveUser().getEmail()空白が返されます。スクリプトの作成者とユーザーの両方が同じ Google Apps ドメインにいる場合にのみ、メール アドレスが返されます。

于 2012-09-06T16:13:52.743 に答える