我是编程的新手,我意识到它可能是一个愚蠢的,但我似乎无法找到解决方案。 我在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);
}
因此,我不希望在每次操作后输入我的名字,而是希望它在会话开始时使用我的名字,并在整个会话期间使用它将其添加到时间戳。
答案 0 :(得分:2)
如果电子表格的用户都已登录其Google帐户,则可以将其名称保存到“用户属性”服务。如果多个用户同时使用电子表格,则即使代码使用相同的密钥名称,“用户属性”也会为该用户获取正确的名称。
如果用户未登录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);
}