我在Google中有一个电子表格,它与五个人共享。只编辑了几个列;所有其他列都被锁定。
我们需要跟踪这些可编辑列的更改,因此,基于这个答案,我在Apps脚本中添加了一个脚本,如下所示:
function onEdit() {
if( s.getName() == "MySpecialSheet" ) { // Set to sheet name
var r = s.getActiveCell();
var col= r.getColumn();
if( col == 3 ) { // Check the column
var nextCell = r.offset(0, 1);
var datetime = new Date();
datetime = Utilities.formatDate(datetime, "GMT+9", "yyyy/MM/dd, hh:mm:ss"); // +9 for Tokyo
nextCell.setValue(datetime);
};
};
}
这会自动插入编辑相关单元格的时间,这很好。但是,我也想添加一种方法来告诉谁编辑了这个单元格。
我在应用程序脚本文档中检查了用户类,但似乎唯一的方法是getEmail()
,它:
在允许脚本未经用户授权而运行的任何上下文中都不可用,例如简单的onOpen(e)或onEdit(e)触发器、Google中的自定义函数或部署到“执行即我”(即由开发人员授权而不是用户授权)的web应用程序。
因为我的脚本使用onEdit()
,所以我无法获得电子邮件地址。有没有办法获取任何类型的ID (我不需要电子邮件地址--可以是帐户的名称或号码),以便编辑一个单元格,然后将其插入另一个单元格中?
如果没有,我想我可以创建一个列,人们只需输入它们的首字母,但是人们往往会忘记,所以如果可能的话,我更喜欢自动化的解决方案。
发布于 2018-01-24 00:40:19
我之前搜索过这个,发现这取决于你是否有私人账户或者是同一家公司的一部分。对于私人账户,这是不可能的,至少在我研究的时候是不可能的。我的解决办法是让每个人填写他/她的名字。
我在这里复制我的代码,您必须更改工作表的名称、行号等。
function onEdit(e) {
if (e.source.getActiveSheet().getName() !== 'adresseliste') return;
if (e.range.columnStart < 1 || e.range.rowStart < 2) return;
e.source.getActiveSheet().getRange(e.range.rowStart, 37)
.setValue(Utilities.formatDate(new Date(), "GMT+2", "dd.MM.yyyy HH:mm"));
var navn = Browser.inputBox('Hvem er du?');
e.source.getActiveSheet().getRange(e.range.rowStart, 38)
.setValue(navn);
var why = Browser.inputBox('Hvorfor endret du?');
e.source.getActiveSheet().getRange(e.range.rowStart, 39)
.setValue(why);
}
https://webapps.stackexchange.com/questions/106379
复制