onEdit(e) 不会运行

问题描述 投票:0回答:1

当登录用户更改单元格值时,该函数可以正常运行,但当有人未登录时则无法正常运行:

它在工作表本身和未受保护的范围内执行简单的操作。 我在网上看到,即使文件在隐身模式下的选项卡中打开,它也应该触发,但它甚至没有在日志中显示该函数已运行。

function onEdit(e) {
  const sheet = e.range.getSheet();
  const sheetsToWatch = ['Content Workbook'];

  if (sheetsToWatch.includes(sheet.getName())) {
    const headers = sheet.getRange(1, 1, 1, sheet.getMaxColumns()).getValues()[0];
    const colToWatch = 'Client Feedback';
    const colToWatchIndex = headers.indexOf(colToWatch) + 1;
    const row = e.range.getRow();

    const colToSet = 'Feedback Processed';
    const colToSetIndex = headers.indexOf(colToSet) + 1;

    if (e.range.getColumn() === colToWatchIndex && row > 1) {
      const row = e.range.getRow();
      const timestamp = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "MM/dd/yyyy HH:mm:ss");
      sheet.getRange(row, colToSetIndex).setValue("No");
      sheet.getRange(row, colToSetIndex + 1).setValue(timestamp);
    }
  }
}
google-apps-script
1个回答
0
投票

按照你的情况,修改如下怎么样?

修改脚本

函数名称从

onEdit
重命名为
installedOnEdit
。并且,请将 OnEdit 触发器安装到
installedOnEdit
参考并再次测试。

function installedOnEdit(e) {
  const sheet = e.range.getSheet();
  const sheetsToWatch = ['Content Workbook'];

  if (sheetsToWatch.includes(sheet.getName())) {
    const headers = sheet.getRange(1, 1, 1, sheet.getMaxColumns()).getValues()[0];
    const colToWatch = 'Client Feedback';
    const colToWatchIndex = headers.indexOf(colToWatch) + 1;
    const row = e.range.getRow();

    const colToSet = 'Feedback Processed';
    const colToSetIndex = headers.indexOf(colToSet) + 1;

    if (e.range.getColumn() === colToWatchIndex && row > 1) {
      const row = e.range.getRow();
      const timestamp = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "MM/dd/yyyy HH:mm:ss");
      sheet.getRange(row, colToSetIndex).setValue("No");
      sheet.getRange(row, colToSetIndex + 1).setValue(timestamp);
    }
  }
}

注:

重要的是,在

when someone not signed-in
的情况下,如果不在事件对象中使用
user
,则不会发生错误。如果在事件对象中使用
user
,则会出现类似
You do not have permission to call Session.getActiveUser. Required permissions: https://www.googleapis.com/auth/userinfo.email
的错误。请注意这一点。

© www.soinside.com 2019 - 2024. All rights reserved.