首页 > 解决方案 > Google表格脚本将getUsername()的值替换为首字母

问题描述

我对代码没有什么经验,所以我根据我在互联网上找到的内容制作了这个脚本。它目前所做的是,当 A 列中的一个单元格被编辑时,E 列被一个时间戳填充,G 列被 A 列的编辑者的用户名填充。然后我有这个数组函数:=ArrayFormula(IF(G2:G = "username1", SUBSTITUTE(G2:G, "username1", "initials1"), IF(G2:G = "username2", SUBSTITUTE(G2:G, "username2", "initials2"),""))它用首字母填充 E 列以 G 列作为辅助列的编辑器(现在只有 2 个编辑器)。

我目前的方法很慢,并不能真正让我扩展到更多的编辑器。如何更改我的脚本,而不是用用户名填充 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());
  }
}

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


解释:

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

旁注:

IndeedSession.getEffectiveUser().getUsername()似乎不受支持V8,但如果它适用于您(您Rhino可能使用),则使用我的解决方案并替换Session.getEffectiveUser().getEmail()Session.getEffectiveUser().getUsername(). 我的答案的重点是使用 json 对象来进行映射。也试试Session.getActiveUser()这相当于Session.getEffectiveUser()简单的触发器。


推荐阅读