猿问

Google Sheets 脚本将 getUsername() 的值替换为首字母缩写

我对代码缺乏经验,因此我根据在互联网上找到的内容制作了这个脚本。它当前所做的是,当编辑 A 列中的单元格时,E 列将填充时间戳,G 列将填充 A 列编辑器的用户名。然后我有这个数组函数:它将用缩写填充 E=ArrayFormula(IF(G2:G = "username1", SUBSTITUTE(G2:G, "username1", "initials1"), IF(G2:G = "username2", SUBSTITUTE(G2:G, "username2", "initials2"),""))列编辑器的成员(目前只有 2 个编辑器),其中 G 列作为辅助列。


我当前的方法很慢,并且实际上不允许我扩展到更多编辑器。我如何更改我的脚本,以便不用用用户名填充 G 列,而是可以直接用缩写填充 E 列,而无需使用 G 列作为帮助程序。


function onEdit(e) {

  var sheet = e.source.getActiveSheet();

  var i = ['Sheet 1', 'Sheet 2'].indexOf(sheet.getName());

  if (i > -1 && e.range.columnStart === 1) {

    e.range.offset(0,4).setValue(Utilities.formatDate(new Date(), "GMT+8", "MM/dd/yyyy"));

    e.range.offset(0,6).setValue(Session.getEffectiveUser().getUsername());

  }

}


富国沪深
浏览 92回答 1
1回答

慕田峪7331174

解释:您可以创建一个包含电子邮件和姓名缩写之间映射的 json 对象:const initials = {    "email1":"initials1",    "email2":"initials2",    "email3":"initials3"};然后得到这样的缩写:e.range.offset(0,6).setValue(initials[Session.getEffectiveUser().getEmail()]);解决方案:function onEdit(e) {  const initials = {    "email1":"initials1",    "email2":"initials2",    "email3":"initials3"  };    var sheet = e.source.getActiveSheet();  var i = ['Sheet 1', 'Sheet 2'].indexOf(sheet.getName());  if (e.range.getValue()!='' && i > -1 && e.range.columnStart === 1) {    e.range.offset(0,4).setValue(Utilities.formatDate(new Date(), "GMT+8", "MM/dd/yyyy"));    e.range.offset(0,6).setValue(initials[Session.getEffectiveUser().getEmail()]);   }}附注:确实Session.getEffectiveUser().getUsername()似乎不支持V8,但如果它适合您(您Rhino可能使用),那么使用我的解决方案并替换Session.getEffectiveUser().getEmail()为Session.getEffectiveUser().getUsername(). 我的答案的要点是使用 json 对象来进行映射。还可以尝试与简单触发器Session.getActiveUser()等效的操作。Session.getEffectiveUser()
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答