为什么我的Google电子表格脚本没有在getUser()上捕获电子邮件?

问题描述:

我正在Google表格中编写我的第一个Google应用程序脚本,并对它打开的可能性感到非常兴奋。但是,我仍然试图弄清楚一些事情:例如在电子表格的不同选项卡之间以及跨独立电子表格(使用不同的电子表格ID)移动数据:有人可以建议如何做到这一点吗?为什么我的Google电子表格脚本没有在getUser()上捕获电子邮件?

但我的直接关注是,我的脚本捕获时间戳,但我也希望它记录用户的电子邮件。我在文档中看到,有一个复杂的标准决定了为什么可以捕获电子邮件 - 这个标准是什么?因为最初测试代码时奇怪,我自己的电子邮件被捕获,但只有约50%的案例。我不确定我完全理解这里发生了什么?

我的代码:

function onEdit(e){ 
    // Set a comment on the edited cell to indicate when it was changed. 
    var range = e.range; 
    var activeSheet = e.source.getActiveSheet(); 
    range.setNote('Last modified: ' + new Date() + new Date().toLocaleTimeString() + ' sheet: ' + activeSheet.getName()); 
    if (activeSheet.getName() == "KYCEntrySheet"){ 
    var r = e.source.getActiveCell(); 
    if(r.getColumn() == 10) { //Any changes within this column set the date below and the email on the 2nd call 
     //if(r.offset(0, 1).getValue() === '') //is empty? 
     r.offset(0, 5).setValue(new Date().toLocaleTimeString());//will only put date, format "123/Date and time" if time needed 
     //if(r.offset(0, 2).getValue() === '') //is empty? 
     r.offset(0, 9).setValue(Session.getUser());//inserts current users email 
    }}} 

谢谢!

您无法获得未明确允许您知道其电子邮件的用户的电子邮件。例如,假设某人共享一个电子表格供所有人编辑,并使用onEdit触发器无形地收集他们的电子邮件。谷歌不允许发生这样的事情。

谷歌不想告诉我们“复杂的标准”是什么,所以我们不知道。据我的理解,一个简单的触发器onEdit不应该访问任何人的个人信息,甚至你的。可安装的触发器(通过资源菜单创建的触发器)可以访问您的个人信息,但不能访问其他人。你可能混淆了这两者。电子表格

使用getSheetByName()的不同选项卡之间

移动数据得到处理您要在纸张上,选择有一个范围,并使用source.copyTo(target)来复制数据。

跨越独立的电子表格(具有不同的电子表格IDS)

使用range.getValues()在源电子表格和target.setValues()在目标电子表格。你需要SpreadsheetApp.openById来处理后者。