在Apps脚本中确定当前用户

时间:2012-09-06 13:04:08

标签: google-apps-script

我正在尝试识别当前用户的名字,以记录谁编辑了这样的内容:

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

但它不起作用 - 用户名是空字符串。 我哪里出错了?

5 个答案:

答案 0 :(得分:11)

好消息:这种解决方法可行!

我使用了一些保护功能,揭示了文档的用户和所有者,并且我将其存储在属性中以获得更好的性能。玩得开心!

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;
}

答案 1 :(得分:5)

我想你将这段代码设置为在onEdit函数(或编辑触发器)中执行。

如果您使用的是消费者帐户,Session.getActiveUser)().getEmail()将返回空白。仅当脚本的作者和用户位于同一Google Apps域时,它才会返回电子邮件地址。

答案 2 :(得分:1)

当我使用从触发器运行的脚本时,我遇到了Wim den Herder解决方案的问题。任何非脚本所有者都无法编辑受保护的单元格。如果脚本是从按钮运行的,它工作正常。但是我需要定期运行脚本,所以这是我的解决方案:

当用户第一次使用工作表时,他/她应该单击按钮并运行它:

constructor(props) {
    super(props);
    this.state = {
        activeFilters: '',
        availableAttributes:[]
    };

    this.setActiveFilter = this.setActiveFilter.bind(this); // this will make setActiveFilter be called with scope of your component object.
}

componentDidMount() {    
    $.ajax('/activeFilters',{    
        success: (e) => {    
            this.setActiveFilter(e);
        },

        error:function(e){
            alert(e);
        }
    });
}

这将用户输入保存到用户属性。可以使用以下代码随时回读:

var user = PropertiesService.getUserProperties()。getProperty(" ID");

答案 3 :(得分:0)

在此代码中,您可以使用单元格进行输入。不需要授权脚本。

function onEdit(e){
  checkUsername(e);
}

function checkUsername(e){
  var sheet = e.source.getActiveSheet();
  var sheetToCheck = 'Your profile';
  var sheetName = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetToCheck);
  var CellInputUsername = 'B4';
  var ActiveCell = SpreadsheetApp.getActive().getActiveRange().getA1Notation();

  if (sheet.getName() !== sheetToCheck || ActiveCell !== CellInputUsername){return;}

  var cellInput = sheetName.getRange(CellInputUsername).getValue();
  PropertiesService.getUserProperties().setProperty("Name", cellInput);

  // Make cell empty again for new user
  sheetName.getRange(CellInputUsername).setValue("");

  var Username = PropertiesService.getUserProperties().getProperty("Name");      
  SpreadsheetApp.getUi().alert("Hello " + Username);
}

答案 4 :(得分:-2)

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