使用谷歌应用程序脚本在谷歌工作表中编辑单元格时的用户名和时间戳



我正在尝试编写一个脚本来实现以下目标:

比方说,在谷歌表单中,数据是在K栏中输入的。我希望L栏给我输入数据的人的用户名,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列中得到了时间戳,但在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());
}
}
}
}

我建议您使用这样的方法,因为您可能需要多次编辑,并且很容易就会用完列。然后,如果需要,您可以使用一个简单的公式提取第一次或最后一次编辑,方便查看。

var triggerSheet = "AA"; //trigger sheet
var triggerRow = 7; //trigger row
var ColK = 11;  // trigger column
var ColL = 12;  // comma seperated users
var ColM = 13;  // comma seperated time stamps
function onEdit(event) {
var name = event.range.getSheet().getName();
switch (name) {
case triggerSheet:
update(event)
break;
}
}
function update(event){
var changedRange = SpreadsheetApp.getActiveRange();
if (changedRange.getColumn() == ColK) {
if (changedRange.getRowIndex() >=triggerRow ) {
var state = changedRange.getValue();
var users = SpreadsheetApp.getActive().getSheetByName(triggerSheet).getRange(changedRange.getRow(),ColL);
var times = SpreadsheetApp.getActive().getSheetByName(triggerSheet).getRange(changedRange.getRow(),ColM);
var timestamp = new Date(); // Get the current time
var originalUsers = users.getValue();
var originalTimes = times.getValue();
times.setValue(originalTimes+timestamp+",");
users.setValue(originalUsers+Session.getActiveUser().getEmail()+",");
}
}
}

最新更新