首页 > 解决方案 > 如何在多张 Google 工作表上运行脚本

问题描述

我有一个脚本,我想在我的 Google 工作表中的特定选项卡上运行倒数计时器,但不一定是所有选项卡“Sheet1”和“Sheet2”。我已经尝试了其他帖子中的一些方法,但在我的情况下它不起作用。我只是一个初学者,正在寻求您的帮助。[倒计时][1]

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Sheet1');

function  countDownSeconds(seconds, minutes){
 while (minutes >=0){   
    sheet.getRange(2,1).setValue(minutes);     
   while (seconds >= 0 ){     
     var m = sheet.getRange(2,1).getValue()
     var s = sheet.getRange(2,2).getValue()
     if (m === 'pausing' || s === 'pausing'|| m === 'reset' || s === 'reset' ) {
      return
     }      
     sheet.getRange(2,2).setValue(seconds); 
     SpreadsheetApp.flush();
     Utilities.sleep(1000)
     seconds --
   }    
   seconds = 59;
   minutes = sheet.getRange(2,1).getValue();
   minutes --
 }
}

function startTimer(){
  var minutes = sheet.getRange(2,1).getValue()
  var seconds = sheet.getRange(2,2).getValue()
  countDownSeconds(seconds, minutes)

}

function pause(){
  var minutes = sheet.getRange(2,1).getValue()
  var seconds = sheet.getRange(2,2).getValue()
  sheet.getRange(2,1).setValue('pausing');  
  sheet.getRange(2,2).setValue('pausing');   
  SpreadsheetApp.flush();
  Utilities.sleep(1000);
  sheet.getRange(2,1).setValue(minutes)
  sheet.getRange(2,2).setValue(seconds)
}

function reset(){
  sheet.getRange(2,1).setValue('reset');  
  sheet.getRange(2,2).setValue('reset');   
  SpreadsheetApp.flush();
  Utilities.sleep(1000);
  sheet.getRange(2,1).setValue(0)
  sheet.getRange(2,2).setValue(0)
}


 [1]: https://i.stack.imgur.com/LnSIZ.png

标签: google-apps-scriptgoogle-sheets

解决方案


我修改了脚本。

当您运行附加到按钮的功能时,您可以调用活动工作表而不是按名称调用工作表。

function  countDownSeconds(seconds, minutes){
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var sheet = ss.getActiveSheet();

 while (minutes >=0){   
    sheet.getRange(2,1).setValue(minutes);     
   while (seconds >= 0 ){     
     var m = sheet.getRange(2,1).getValue()
     var s = sheet.getRange(2,2).getValue()
     if (m === 'pausing' || s === 'pausing'|| m === 'reset' || s === 'reset' ) {
      return
     }      
     sheet.getRange(2,2).setValue(seconds); 
     SpreadsheetApp.flush();
     Utilities.sleep(1000)
     seconds --
   }    
   seconds = 59;
   minutes = sheet.getRange(2,1).getValue();
   minutes --
 }
}

function startTimer(){
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var sheet = ss.getActiveSheet();
  var minutes = sheet.getRange(2,1).getValue()
  var seconds = sheet.getRange(2,2).getValue()
  countDownSeconds(seconds, minutes)

}

function pause(){
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var sheet = ss.getActiveSheet();
  var minutes = sheet.getRange(2,1).getValue()
  var seconds = sheet.getRange(2,2).getValue()
  sheet.getRange(2,1).setValue('pausing');  
  sheet.getRange(2,2).setValue('pausing');   
  SpreadsheetApp.flush();
  Utilities.sleep(1000);
  sheet.getRange(2,1).setValue(minutes)
  sheet.getRange(2,2).setValue(seconds)
}

function reset(){
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var sheet = ss.getActiveSheet();
  sheet.getRange(2,1).setValue('reset');  
  sheet.getRange(2,2).setValue('reset');   
  SpreadsheetApp.flush();
  Utilities.sleep(1000);
  sheet.getRange(2,1).setValue(0)
  sheet.getRange(2,2).setValue(0)
}

我做了一个样本表。查看两个表 time1 和 time2

https://docs.google.com/spreadsheets/d/16XwVAF6DqIaREA9Cvxz2IvsON5vFJc0gJjHHPR9ZKH4/edit#gid=495629246

按钮在两个工作表中都有效


推荐阅读