谷歌工作表时间戳脚本太慢



我正在使用一个用于打卡和打卡的脚本来跟踪工作时间和效率。每当单击复选框时,脚本都会在进度列中创建时间戳,然后查找每个"签入"one_answers"签出"时间之间的差异,以在单独的单元格中输出"总工作时间"。

如果选中该复选框,则表示该员工正在工作,如果未选中该框,则他们要么完成任务,要么休息,并且他们的时间将添加到该任务的总时间中。他们可以打卡几次,并将自己的时间添加到总时间中。

问题是脚本运行速度太慢,有时会错过时间戳,从而使工作表变得毫无用处。

我对谷歌的脚本还很陌生,所以我知道这还没有优化,可以清理,但我真的不知道是什么原因导致它运行得这么慢。任何建议都很好。下面的脚本,我可以链接到一个伪表。

https://docs.google.com/spreadsheets/d/1B3xcmV4FBIUjxd_bzBD4mytbLyEPyubWVdvZDLTQsJE/edit?usp=sharing

function onEdit(e) {

addTimestamp(e);

}
function addTimestamp(e){
var row = e.range.getRow();
var col = e.range.getColumn();
var startRow = 18;
var targetColumn = 2;
var col26 = e.source.getActiveSheet().getRange(row,26).getValue();
var col27 = e.source.getActiveSheet().getRange(row,27).getValue();
var col28 = e.source.getActiveSheet().getRange(row,28).getValue();
var col29 = e.source.getActiveSheet().getRange(row,29).getValue();
var col30 = e.source.getActiveSheet().getRange(row,30).getValue();
var col31 = e.source.getActiveSheet().getRange(row,31).getValue();
var col32 = e.source.getActiveSheet().getRange(row,32).getValue();
var col33 = e.source.getActiveSheet().getRange(row,33).getValue();


if(col === targetColumn && row >= startRow ){

var currentDate = new Date();

if(col26 ==""){
e.source.getActiveSheet().getRange(row,26).setValue(currentDate);}

if(col27 =="" && col26 != ""){
e.source.getActiveSheet().getRange(row,27).setValue(currentDate);}  
if(col28 =="" && col27 != ""){
e.source.getActiveSheet().getRange(row,28).setValue(currentDate);}  
if(col29 =="" && col28 != ""){
e.source.getActiveSheet().getRange(row,29).setValue(currentDate);}      
if(col30 =="" && col29 != ""){
e.source.getActiveSheet().getRange(row,30).setValue(currentDate);}  
if(col31 =="" && col30 != ""){
e.source.getActiveSheet().getRange(row,31).setValue(currentDate);}  
if(col32 =="" && col31 != ""){
e.source.getActiveSheet().getRange(row,32).setValue(currentDate);}  
if(col33 =="" && col32 != ""){
e.source.getActiveSheet().getRange(row,33).setValue(currentDate);} 

//END IF check if date created exists
} // END IF check column, row, worksheet
} // END function

试试这个:

function addTimestamp(e){
//e.source.toast('Entry');
const sh=e.range.getSheet();
const dt=new Date();
var l=1;
if(e.range.rowStart>17 && e.range.columnStart==2 && sh.getName()=="Batch") {
//e.source.toast('conditional');
var vs=sh.getRange(e.range.rowStart,26,1,8).getValues()[0];
vs.forEach(function(el,i){
if(el=='' && l!='')vs[i]=dt;
l=el;     
});
sh.getRange(e.range.rowStart,26,1,8).setValues([vs]);
} 
} 

最新更新