Google sheets ';对于循环';根据分钟时间触发器作为自定义计时器递增

Google sheets ';对于循环';根据分钟时间触发器作为自定义计时器递增,google-sheets,Google Sheets,一般来说,我并不擅长与计算机打交道,我曾尝试在VBA中创建计时器,但在遇到路障时(宏在共享时会失去功能),我现在尝试使用Google Sheets创建相同的东西,以便更容易使用共享的工作表,但现在出现了一系列不同的问题: 1) 我的计时器实际上不是一个计时器,而是一个“for循环”,它根据分钟时间触发器递增,因此每个后续的单元格计时器中的单元格越多越慢 2) 当单元格计时器运行一段时间时,计时器会自动停止并向我发出错误消息: 一天内使用太多计算机时间的服务 或者有时候 超过最大执行时间 然后,我

一般来说,我并不擅长与计算机打交道,我曾尝试在VBA中创建计时器,但在遇到路障时(宏在共享时会失去功能),我现在尝试使用Google Sheets创建相同的东西,以便更容易使用共享的工作表,但现在出现了一系列不同的问题:

1) 我的计时器实际上不是一个计时器,而是一个“for循环”,它根据分钟时间触发器递增,因此每个后续的单元格计时器中的单元格越多越慢

2) 当单元格计时器运行一段时间时,计时器会自动停止并向我发出错误消息:

一天内使用太多计算机时间的服务

或者有时候

超过最大执行时间

然后,我必须手动触发计时器,或者等待分钟时间触发器再次触发,这将使这张纸毫无用处

如果有人愿意帮助这个老家伙,我将粘贴下面的代码:

makelist()使用开始按钮将调用此函数的单元格的单元格位置存储在另一张工作表上

function makelist() {
 var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
 var cell = ss.getActiveCell();
 var r = cell.getRow();
 var c = cell.getColumn();
 var list = SpreadsheetApp.getActiveSpreadsheet().getSheets()[1];
 var i = 1;
 var cell=list.getRange(1,1);
 while( cell.getValue()!= ""){
  i++;
 cell=list.getRange(i,1);
 }
 cell.setValue(r);
 cell=list.getRange(i,2);
 cell.setValue(c);
 }
dellist()从列表中删除已按下停止按钮的特定单元格位置

function dellist(){
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var cell = ss.getActiveCell();
  var r = cell.getRow();
  var c = cell.getColumn();
  var list = SpreadsheetApp.getActiveSpreadsheet().getSheets()[1];
  var i = 1;
  var cell1=list.getRange(1,1);
  var cell2=list.getRange(1,2);
 while( cell1.getValue() != ""){
  if(cell1.getValue() == r && cell2.getValue() == c){
  list.deleteRow(i);
  }
  i++;
  cell1=list.getRange(i,1);
  cell2=list.getRange(i,2)
  }
  }
addtime()将列表中存储位置的所有单元格的活动单元格值增加1

function addtime(){
 var s1=SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
 var s2=SpreadsheetApp.getActiveSpreadsheet().getSheets()[1];
 var r,c,value,n;
 for(n=1;n<=60;n++)
 { 
  var i=1;
  var cell=s2.getRange(1,1);
  var cell1=s2.getRange(1,2); 

while(cell.getValue()!="")
 {

 r=cell.getValue();
 c=cell1.getValue();
 cell3=s1.getRange(r,c);
 value=cell3.getValue();
 cell3.setValue(value+1);
 i++;
 cell=s2.getRange(i,1);
 cell1=s2.getRange(i,2);
 }
 }    
 }
函数addtime(){
var s1=SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
var s2=SpreadsheetApp.getActiveSpreadsheet().getSheets()[1];
var r,c,value,n;

对于(n=1;n您应该创建一个与项目关联的自定义脚本,在那里编写所需的函数,然后在工作表更改时设置触发器:


您可以在此处找到有关自定义脚本函数的更多信息:

谢谢@fabrosell的建议。让我尝试一下,然后尽快给您回复。嘿@fabrosell…只是为了确保我们在同一页上的函数不是我创建的自定义脚本吗?我确实在上面的代码上设置了一个时间触发器,每分钟一次,但触发器除外er无法执行,经常给我上面写的错误消息…我是不是遗漏了什么?是的,自定义函数是在自定义脚本代码中创建的。我认为你应该做的是,将定时触发器更改为OnChange触发器。记住,谷歌会自动停止任何运行“时间过长”的函数或代码用你已经体验过的信息。