我正在使用Google App Script和Google Spreadsheet onOpen()触发器。我正在Google电子表格中锁定登录用户。
相同的限制是它没有在我在论坛上找到的跨域记录电子邮件ID。
以下是相同的代码:
function onOpen(e)
{
try
{
var ui = SpreadsheetApp.getUi();
ui.createMenu('Action')
.addItem('Add Data', 'addData')
.addToUi()
var sheet =SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Login Details");
sheet.appendRow([Session.getActiveUser().getEmail(),new Date()]);
}
catch(e)
{
Logger.log(e);
}
}
onOpen()功能的一个观察结果:
1]我是电子表格的所有者,它只记录我们公司域名的电子邮件ID。 (自动onOpen()电子表格)
2]当我打开电子表格的有界脚本并运行onOpen()时,从其他域中,然后它会记录登录用户。
背后的原因是什么,跨域的用户是否有解决方法?
答案 0 :(得分:0)
我认为Session.getActiveUser().getEmail()
在该人不是所有者时,会在外部域上触发onOpen触发器。
此外,每分钟自动触发器也无法记录活动用户。
以下是解决方法:
在电子表格中添加菜单,其中包含一个选项,单击该选项后,将运行该功能以附加所需的行。因为,当我们从脚本手动运行函数时,Session.getActiveUser().getEmail()
正在工作。
使用此代码:
function addMenu()
{
var ui = SpreadsheetApp.getUi();
ui.createMenu('Log user')
.addItem('Run script', 'appendRow')
.addToUi()
}
并添加此功能:
function appendRow()
{
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("YOUR_SHEET").appendRow([Session.getActiveUser().getEmail(),new Date()]);
}
现在,只要您想要记录活跃用户,请转到日志用户,然后点击运行脚本,它会附加该行。
此外,不要忘记在客户端甚至您身边为 addMenu()功能设置onOpen触发器。
有关详情,请参阅:Class session