课程会话在某些 Google 电子表格中不起作用

Class Session not working in some Google spreadsheets

本文关键字:Google 电子表格 不起作用 程会话 会话      更新时间:2023-09-26

我在谷歌应用套件中的类会话有问题

我编写了一个脚本,用于记录在电子表格中编辑工作表的日期和用户。它适用于我的测试页面,但是当我将其放入另一个电子表格(名为"test"的副本)时,它不起作用!!我有 8 个电子表格,具有相同数量的工作表,所有工作表的名称都相似,并且该脚本仅适用于其中一个电子表格(和测试)。这是脚本:

function onEdit(event)
{
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  //Last Session record
  var actSht = event.source.getSheetByName("somepage")
  var actRng = event.source.getActiveRange();
  var lastCell0 = actSht.getRange(2,16);
  var lastCell1 = actSht.getRange(2,17);
  var date = Utilities.formatDate(new Date(), "GMT-6", "dd/MM/yyyy HH:mm");
  var r= actSht.getActiveCell().getRow();
  lastCell0.setValue("Date_Mod");
  lastCell1.setValue("user");
  if(r=='3'){
    actSht.getRange(r,17).setValue(Session.getEffectiveUser());
    actSht.getRange(r,16).setValue(date);
  }
  if(r=='4'){
    actSht.getRange(r,17).setValue(Session.getEffectiveUser());
    actSht.getRange(r,16).setValue(date);
  }
 }

这是两个电子表格的相同代码,一个电子表格工作正常,另一个

电子表格不起作用。

我该如何解决这个问题?

这很可能是一个安全问题,由于简单的触发器限制,应该在简单的触发器中避免会话调用(查看 https://developers.google.com/apps-script/guides/triggers/#restrictions,特别是关于非常模糊的第 5 个项目符号点 - "他们可能无法确定当前用户的身份"(页面上的错误)以及链接将您发送回会话页面的位置)。在您的情况下,我想知道它是否仅适用于共享您的域名的用户。

如果您查看 https://developers.google.com/apps-script/reference/base/session#getEffectiveUser(),则没有简单触发器的参考(对我来说已经很可疑了),但是关于可安装触发器的声明告诉我,它可能不应该在简单的触发器中使用。

我自己刚刚经历了类似的练习,当脚本所有者的域与启动脚本的人的域不匹配时,getActiveUser 和 getEffectiveUser 都返回空白(换句话说,当有人在域外共享脚本并使用不同的用户名(例如他们的个人 Google 帐户)运行它时,就会发生这种情况)。因此,我创建了一个可安装的触发器,它调用getEffectiveUser并且现在可以工作了(请注意,如果您以编程方式而不是通过资源>当前项目的触发器定义可安装触发器,请确保触发器函数位于调用脚本文件中)。

希望这有帮助。