【问题标题】:How to create a log of Spreadsheet Edits using Google Apps Script如何使用 Google Apps 脚本创建电子表格编辑日志
【发布时间】:2022-11-17 09:33:40
【问题描述】:

我正在寻找创建特定工作表中发生的操作的日志。

此脚本运行良好,但存在一个主要问题:

除了我自己的电子邮件之外,我没有收到“TheUser”的值。是否可以收到其他人的电子邮件?他们以编辑身份登录,使用 gmail。

function onEdit(e) {
var sName = e.source.getActiveSheet().getSheetName();
if(sName !== "Recent_Changes") {
var theUser = Session.getActiveUser().getEmail();
var value;
var mA1 = e.range.getA1Notation().split(":")[0];
var time = new Date();
if(typeof(e.value) == 'string') {
var aCell = e.source.getRange(mA1);
value = aCell.getValue();
var form = "'" + aCell.getFormula();
} else {
value = e.value;
}
var data = [sName, mA1, time, value, form, theUser];
e.source.getSheetByName("Recent_Changes").appendRow(data);
}
}

【问题讨论】:

  • 不总是.....
  • 这样做的问题是将结果存储在文件中需要花费大量时间。任何类型的文件都需要时间来打开和关闭。您将在每次编辑时使用脚本语言而不是编译语言来执行此操作。它只会减慢一切。
  • @Cooper 感谢 Cooper - 你对其他方法有什么建议吗?版本历史不能满足我的需要 - 我正在探索所有选项,但这是我能想到的最好的
  • 你看过活动 API 了吗?
  • 您的电子表格是否公开共享并且编辑者仅通过共享链接访问电子表格(任何知道链接的人)?

标签: google-apps-script google-sheets google-signin


【解决方案1】:

经测试,getActiveUser() 功能在用户处于同一工作区组织下时有效。然而,当用户不在同一个组织中并且只使用他们的个人 gmail 时,情况并非如此,即使电子表格直接共享给他们也是如此。这将返回一个空字符串。 有关详细信息,请参阅参考资料:Detailed documentation: getActiveUser()

如果开发者自己运行脚本或与用户属于同一 Google Workspace 网域,则这些限制通常不适用。

您可能会看到具有相同场景的 SO 案例:How to get active user email with installed onEdit trigger?

此外,Simple Triggers 文档中的 Restrictions Section 指出

他们可能会也可能不会确定当前的身份 用户,取决于一组复杂的安全限制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多