【发布时间】:2020-07-05 08:23:41
【问题描述】:
我正在通过一个 Android 应用获取学生出勤率,并将其存储在 Google 表格中。它包括时间戳,但对于分析我只需要日期。所以我使用 ON CHANGE 触发器作为时间戳。当学生输入他的出勤率时(如下所示),时间戳更改为日期,并使用 ON CHANGE 触发器将主题代码添加到此(lastrow,6)单元格。但现在的问题是,在 50 行数据中,有 8-10 行没有将时间戳更改为日期,因此相应行中也缺少主题代码的插入。然后我使用 Lock Service 来限制使用 try 和 catch 方法对用户的并发访问,但它不起作用。数据集示例和apps脚本代码如下:
数据如下:
Timestamp Student ID-Name Umail Geoloc-Latitude Geoloc-Longitude Subject-Code
2020-03-24 1902032 1902032@bubt.ac.bd 23.8669328 90.2858456 ICTE4113
function setSheetName(e) {
try{
var ss=e.source;
var sh=ss.getActiveSheet();
var key=sh.getName();
var lastRow=sh.getLastRow();
var lastColumn=sh.getLastColumn();
if((lastRow>1) && (key.indexOf("0")>-1 || key.indexOf("1")>-1 || key.indexOf("2")>-1 || key.indexOf("3")>-1 || key.indexOf("4")>-1 || key.indexOf("5")>-1 || key.indexOf("6")>-1 || key.indexOf("7")>-1 || key.indexOf("8")>-1 || key.indexOf("9")>-1)){
sh.getRange(lastRow,6).setValue(key);
sh.getRange(lastRow,1).setNumberFormat("yyyy-mm-dd");
}
LockService.getScriptLock().waitLock(2000);//Throws exception if fail
}catch(e){
SpreadsheetApp.flush();
LockService.getScriptLock().releaseLock();
}
}
【问题讨论】:
-
锁需要在函数顶部获取。将
waitLock()放在try{下方。 -
对不起,我这样做了,但结果还是一样。等待锁不起作用!
-
是否发现了错误?
}catch(e){ Logger.log("Error: " + e.message);Logger.log("Stack: " + e.stack)另外,运行代码后,单击查看菜单,然后单击执行记录或执行。 -
没有发现错误。但是,我猜在执行记录中存在一些问题。请检查原帖正下方的图片。
-
如果执行失败,状态栏中会有红色的“失败”字样,我看不到。
标签: google-apps-script google-sheets triggers