我的脚本适用于某些人,但不适用于其他人

时间:2019-11-20 15:42:05

标签: google-apps-script google-sheets

我在Google表格中创建了一个使用多个脚本的审核模板。该脚本旨在在活动用户单击复选框时用活动用户的电子邮件和时间戳记填充单元格。该脚本有效,除了一个人之外,该脚本无法识别其活动用户的电子邮件。有人可以告诉我为什么该脚本适用于某些脚本而不适用于其他脚本吗?

我已经在空白的测试电子表格中测试了该脚本,并且该脚本适用于此人。我们在另一个Google表格中也遇到了同样的问题,但是我们通过创建新的电子表格并复制所有标签和脚本来解决了这个问题。但是,尝试对此电子表格执行相同操作失败。

这是我的剧本:

function onEdit(e) {  //this is the event Google Sheets fires when cells are changed
var email = Session.getActiveUser().getEmail(); // Get the email address of the person running the script.
var date = new Date();
var spreadsheet = SpreadsheetApp.getActive();
 if (e.source.getActiveSheet().getName() == "InterimTestsOfControls") {   //only do this if the changed cell is on the specific worksheet you care about
  switch (e.range.getA1Notation()) {  //This gets the cell that was edited
    case "E5":                        //and this switch statement allows you to only respond to the cells you care about
      if (e.value == "TRUE") {
        SpreadsheetApp.getActiveSheet().getRange("F5").setValue("Prepared by " + email + " " + date);
        Logger.log(email);
        spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Audit Planning'), true).getRange('C7').activate().setValue(email);
        spreadsheet.setActiveSheet(spreadsheet.getSheetByName('InterimTestsOfControls'), true).getRange('C5').activate();
      }
      else {
        SpreadsheetApp.getActiveSheet().getRange("F5").setValue("Click box to sign-off as preparer");
        Logger.log(email);
        spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Audit Planning'), true).getRange('C7').activate().setValue("");
        spreadsheet.setActiveSheet(spreadsheet.getSheetByName('InterimTestsOfControls'), true).getRange('C5').activate();
      }
    }
  }
}

2 个答案:

答案 0 :(得分:0)

摘自Session class的官方文档:

  

getActiveUser()

     

获取有关当前用户的信息。 如果安全策略不允许访问用户的身份,User.getEmail()将返回一个空白字符串。

这种情况可能在许多不同的情况下发生:

  • 在允许脚本未经用户授权运行的任何情况下,用户的电子邮件地址均不可用,例如简单 onOpen(e)onEdit(e)触发器,自定义功能在Google表格中,或者部署为“以我的身份执行”(即由开发人员而非用户授权)的网络应用。
  • 如果开发人员自己运行脚本或与用户属于同一G Suite域,则这些限制通常不适用。

根据您的情况,我发现您使用的是简单的onEdit(e)触发器-看来这可能是问题所在。您可能要改签Installable triggers

答案 1 :(得分:0)

nuxt:
  build:
    # ...
    args:
      PUBLIC_API_URL: ${PUBLIC_API_URL}

获取和设置有效范围是宏录制器在执行每一步后的剩余内容,通常在脚本中不需要这样做。实际上,这会减慢您的脚本的速度,因此请尽量避免在大多数脚本编写中普遍使用该方法。