![](/img/trans.png)
[英]Apps Script (Google Sheets): copyTo function (Paste Values) does not work
[英]Lock service does not work in Google Sheets using Apps Script
我正在从 android 应用程序中获取学生出勤率,它存储在 Google 表格中。 它包括时间戳,但对于分析我只需要日期。 所以我使用 ON CHANGE 触发器作为时间戳。 当学生输入他的出勤率时(如下所示),时间戳更改为日期,并使用 ON CHANGE 触发器将主题代码添加到此(lastrow,6)单元格。 但现在的问题是,在 50 行数据中,有 8-10 行没有将时间戳更改为日期,因此相应行中也缺少主题代码的插入。 然后我使用 Lock Service 来限制使用 try 和 catch 方法对用户的并发访问,但它不起作用。 数据集示例和应用程序脚本代码如下:
数据如下:
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();
}
}
try
语句的末尾设置锁并在catch
内释放它鉴于try..catch块不是同时执行的,这是行不通的——它要么是一个,要么是另一个。
所以要么你必须用锁来包装语句的两个部分,要么你只在try
中使用锁(因为只有在失败的情况下才会执行catch
)。
样品 1:
function setSheetName(e) {
LockService.getScriptLock().waitLock(2000);
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");
}
}catch(e){
SpreadsheetApp.flush();
}
LockService.getScriptLock().releaseLock();
}
样本 2:
function setSheetName(e) {
try{
LockService.getScriptLock().waitLock(2000);
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().releaseLock();
}catch(e){
SpreadsheetApp.flush();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.