我有一个Google表格,有15个人在处理它。每当将数据输入到Q列时,我都会使用以下脚本向X列添加时间戳记:
var COLUMNTOCHECK = 17;
var DATETIMELOCATION = [0, 6];
var SHEETNAME = 'Requires Review'
function onEdit(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
if (sheet.getSheetName() == SHEETNAME) {
var selectedCell = ss.getActiveCell();
if (selectedCell.getColumn() == COLUMNTOCHECK) {
var dateTimeCell = selectedCell.offset(DATETIMELOCATION[0], DATETIMELOCATION[1]);
dateTimeCell.setValue(new Date(new Date().setHours(0, 0, 0, 0)))
.setNumberFormat('MM/d/yy');
}
}
}
该脚本有效,但并非始终如此。我想这是因为在某些情况下,有多个用户同时在Q列中进行编辑,并且脚本无法跟上。有没有办法来解决这个问题?有没有办法使另一个脚本执行与上述相同的操作,但是它代替编辑触发器,而是每分钟左右运行一次,并将时间戳记批量添加到已填充的Q列中的所有单元格中?
答案 0 :(得分:0)
尝试此代码,因为它将使用已经包含活动范围的事件对象e
,所以运行速度会更快:
var COLUMNTOCHECK = 17;
var DATETIMELOCATION = [0, 6];
var SHEETNAME = 'Requires Review'
function onEdit(e) {
if (e.range.getSheet().getName() == SHEETNAME) {
if (e.range.getColumn() == COLUMNTOCHECK) {
var dateTimeCell = e.range.offset(DATETIMELOCATION[0], DATETIMELOCATION[1]);
dateTimeCell.setValue(new Date(new Date().setHours(0, 0, 0, 0)))
.setNumberFormat('MM/d/yy');
}
}
}
或使用时间触发器每x分钟/小时激活一次功能。在此示例中,您只需执行一次createTrigger
。
var COLUMNTOCHECK = 17;
var DATETIMELOCATION = [0, 6];
var SHEETNAME = 'Requires Review'
function createTrigger()
{
ScriptApp.newTrigger("myFunction")
.timeBased()
//triggers every 2 hours
.everyHours(2)
.create();
}
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(SHEETNAME);
//then grab the correct range and set Values
}
}
}