我正在尝试提取对Google表格进行更改的人的ActiveUser和电子邮件地址,并认为可以使用以下内容,但我所能得到的只是时间戳。如果我将“var obj2 = (Session.getActiveUser().getEmail());更改为其他任何内容,它会提取新数据,所以我觉得我的脚本的其余部分很好,但无法弄清楚为什么它永远不会提取用户名或地址...
对于我做错了什么有什么想法吗?我听说谷歌可能不再允许通过 onEdit 提取此信息?如果是这样的话还有别的办法吗?
不起作用
function onEdit(e) {
var r = e.range;
var ss = r.getSheet();
// Prepare an object for searching sheet name.
var obj = {'SHEET1': "D", 'SHEET2': "G"};
var obj2 = (Session.getActiveUser().getEmail());
// Using the object, check the sheet and put or clear the range.
if (r.getColumn() == 1 && obj[ss.getSheetName()]) {
var celladdress = obj[ss.getName()] + r.getRowIndex();
if (r.isChecked()) {
ss.getRange(celladdress).setValue(new Date()).setNumberFormat(("MM/DD/YYYY hh:mm:ss") + " " + obj2);
} else {
ss.getRange(celladdress).clearContent();
}
}
}
确实有效(吐出时间戳,末尾有一个空格和单词TEST。测试是我期望第一个示例中当前不起作用的用户名/电子邮件的位置)
function onEdit(e) {
var r = e.range;
var ss = r.getSheet();
// Prepare an object for searching sheet name.
var obj = {'SHEET1': "D", 'SHEET2': "G"};
var obj2 = ("TEST");
// Using the object, check the sheet and put or clear the range.
if (r.getColumn() == 1 && obj[ss.getSheetName()]) {
var celladdress = obj[ss.getName()] + r.getRowIndex();
if (r.isChecked()) {
ss.getRange(celladdress).setValue(new Date()).setNumberFormat(("MM/DD/YYYY hh:mm:ss") + " " + obj2);
} else {
ss.getRange(celladdress).clearContent();
}
}
}
来自:
https://developers.google.com/apps-script/guides/triggers/events下
User
一个用户对象,代表活动用户(如果可用)(取决于一组复杂的安全限制)。
来自:
https://developers.google.com/apps-script/reference/base/user#getemail
用户的电子邮件地址在任何允许脚本在未经用户授权的情况下运行的上下文中都不可用,例如简单的
或onOpen(e)
触发器。onEdit(e)
如果您位于工作空间域中,那么您需要做的就是使其成为可安装的触发器。然后,如果您调用以下命令,您域中编辑它的任何人都会出现在日志中:
Logger.log(e.user.getEmail())
但对于消费者(gmail)帐户来说,这要有限得多,通常只返回一个空白字符串。这是为了安全起见,因为如果没有这样的策略,有人可能会使用表格来挖掘电子邮件地址。