【发布时间】:2019-11-06 16:49:19
【问题描述】:
我正在尝试编写一个脚本来实现以下目标:
假设在 Google 表格中,数据在 Col K 中输入。我希望 Col L 向我提供输入数据的人的用户名,并希望 Col M 向我显示输入数据时的时间戳。此外,如果 Col K 以后更新,我希望 Col L 和 M 保持原样,但 Col N 显示更新 Col K 的人的用户名,Col O 显示用户更新 Col K 时的时间戳。
我编写了一个脚本(见下文),它似乎在 K、L、M、N、O 列上运行良好,但是当我将脚本更改为适用于 F、G、H、I、J 列时,我得到了H 和 J 列中的时间戳,但我没有得到 Col G 和 I 中的用户名,这似乎很奇怪。有人可以看看这里有什么问题吗?
function onEdit(event) {
var name = event.range.getSheet().getName();
switch (name) {
case "AA":
update(event)
break;
}
}
function update(event){
var ColK = 11; // Column Number of "K"
var changedRange = SpreadsheetApp.getActiveRange();
if (changedRange.getColumn() == ColK) {
if (changedRange.getRowIndex() >=7 ) {
// An edit has occurred in Column J
var state = changedRange.getValue();
var adjacentDate = SpreadsheetApp.getActive().getSheetByName("AA").getRange(changedRange.getRow(),ColK+4);
var adjacentDate2 = SpreadsheetApp.getActive().getSheetByName("AA").getRange(changedRange.getRow(),ColK+2);
var adjacentLDAP = SpreadsheetApp.getActive().getSheetByName("AA").getRange(changedRange.getRow(),ColK+3);
var adjacentLDAP2 = SpreadsheetApp.getActive().getSheetByName("AA").getRange(changedRange.getRow(),ColK+1);
var timestamp = new Date(); // Get the current time
adjacentDate2.setValue(timestamp);
adjacentLDAP2.setValue(Session.getActiveUser().getEmail());
if (adjacentDate.getValue() == "") {
// Write timestamp into adjacent cell
adjacentDate.setValue(timestamp);
adjacentLDAP.setValue(Session.getActiveUser().getEmail());
}
}
}
}
【问题讨论】:
-
同一个单元格不能编辑几十次吗?这似乎是一种非常低效的做事方式,不是吗?为什么不在相同的两列中附加名称和时间戳,用逗号分隔?
-
是的,我只是想看看原始数据的输入时间和数据最后一次更改的时间。每次数据更改时,我都不需要时间戳。另外,我还需要计算上次更新和原始查询之间的日期,因此用逗号将它们分隔在同一列中对我来说不起作用。
-
我将 getActiveUser 更改为 getEffectiveUser 并且代码现在可以工作了!
标签: google-apps-script google-sheets timestamp