如何在另一个函数中使用函数的值编辑
问题描述:
我是编程的新手,我意识到它可能是一个愚蠢的,但我似乎无法找到解决方案。 我在Google表格中使用onOpen触发器和onEdit触发器。 onOpen函数只通过输入框从用户处获得一个名称。 现在,我想用onEdit函数为用户对单元格添加时间戳名称时所做的所有更改进行时间戳记。 我希望我的目标明确。如何在另一个函数中使用函数的值编辑
下面是应该代码:
function onOpen() {
var id = Browser.inputBox('ID Check', 'Enter your name', Browser.Buttons.OK);
return id
}
function onEdit() {
// Set a comment on the edited cell to indicate when it was changed.
var ss = SpreadsheetApp.getActiveSpreadsheet()
var sheet = ss.getSheets()[0]
var range = sheet.getActiveRange()
// var name = onOpen().value; .... this what i would like to get
range.setNote('Last modified: ' + new Date() + name);
}
所以不是每一个动作后,输入我的名字,我希望它把我的名字在会议开始,并用它在整个会议进行添加到时间戳。
答
如果电子表格的用户都已登录到他们的Google帐户,那么您可以将他们的名称保存为“用户属性”服务。如果多个用户同时使用电子表格,则即使代码使用相同的密钥名称,用户属性也会为该用户获取正确的名称。
如果用户未登录Google帐户,则无法使用用户属性。您可以将每个用户名保存到电子表格的文档属性中,但如果同一电子表格的多个用户未登录到Google帐户,则电子表格无法“知道”谁在使用电子表格,因此无法知道什么名字来检索。
因此,如果多个用户将使用同一个电子表格的同时,那么唯一的办法知道分配是,如果用户有一个谷歌帐户,他们在登录什么名字。
以下代码显示如何保存并从用户属性中检索名称。
function onOpen() {
var usrProps,sessionName;
sessionName = Browser.inputBox('ID Check', 'Enter your name', Browser.Buttons.OK);
if (!sessionName) {//The user did not enter a name
sessionName = Session.getActiveUser().getEmail();//Get the logged in users email address
sessionName = sessionName.slice(0,sessionName.indexOf("@"));//Remove domain part of email address
}
usrProps = PropertiesService.getUserProperties();//Get User Properties
usrProps.setProperty('usrName', sessionName);//Save the user name with a key name
return sessionName;
}
function onEdit() {
var currentNote,newNote,sessionName,usrProps;
// Set a comment on the edited cell to indicate when it was changed.
var ss = SpreadsheetApp.getActiveSpreadsheet()
var sheet = ss.getSheets()[0]
var range = sheet.getActiveRange()
// var name = onOpen().value; .... this what i would like to get
usrProps = PropertiesService.getUserProperties();//Get User Properties
sessionName = usrProps.getProperty('usrName');//Get the user name for this user that was saved in onOpen
currentNote = range.getNote();//Get current note
if (currentNote) {
newNote = currentNote + ' - Last modified: ' + new Date() + sessionName;
} else {
newNote = 'Last modified: ' + new Date() + sessionName;
}
range.clear({commentsOnly: true});//Clear existing comment
range.setNote(newNote);
}
如果'onOpen'是一个回调函数,从它返回没有什么意义。您需要覆盖全局变量或其他一些机制。 – Carcigenicate
同时会有多个用户吗?这些用户是否会登录Google帐户? –