为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

富国沪深 2023-10-14 10:07:06
我对代码缺乏经验,因此我根据在互联网上找到的内容制作了这个脚本。它当前所做的是,当编辑 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());  }}
查看完整描述

1 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

解释:

您可以创建一个包含电子邮件和姓名缩写之间映射的 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()


查看完整回答
反对 回复 2023-10-14
  • 1 回答
  • 0 关注
  • 91 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信