我对Google脚本编写完全不熟悉,但我在这里使用了各种帖子来拼凑我需要的内容:当某个列发生更改时,会在行中添加时间戳。这是我目前正在使用的:
function onEdit() {
var s = SpreadsheetApp.getActiveSheet();
if( s.getName() == "test" ) { //checks that we're on the correct sheet
var r = s.getActiveCell();
if( r.getColumn() == 16 ) { //checks the column
var nextCell = r.offset(0, 1);
if( nextCell.getValue() === '' ) //is empty?
nextCell.setValue(new Date());
}
}
}
当我手动更改数据时,这非常有效;但是,脚本正在监视的列从另一个工作表中提取数据,这无法触发触发器/脚本。我如何解决这个问题,以便公式(引用其他表格)的单元格仍会激活我的脚本?
非常感谢任何帮助。谢谢!
答案 0 :(得分:1)
onEdit trigger仅在实际用户编辑电子表格时有效。取决于您的用例,但您可以使用Time-driven trigger并在周期性间隔中设置它,并使用函数监视列的更改,这是一个示例:
function monitorColumn() {
// Add the trigger from the Resources menu in the Script Editor
// Script Editor > Resources > Current oroject's triggers > Add trigger
// [monitorColumn] - [Time-driven] - [Hour timer] - [Every hour]
var s = SpreadsheetApp.getActiveSpreadsheet();
var ss = s.getSheetByName("test"); // Get the sheet by name
// Get the values of the columns P & Q with getRange(row, column, numRows, numColumns)
var columnValues = ss.getRange(1, 16, ss.getLastRow(), 2).getValues();
// Loop through the values
for (var i = 0; i < columnValues.length; i++) {
// If cell in column P is empty and cell in column Q is not empty set todays date
if(columnValues[i][0] != "" && columnValues[i][1] == ""){
// While a range index starts at 1, 1, the JavaScript array will be indexed from [0][0].
ss.getRange(i+1,17).setValue(new Date());
}
}
}