首页 文章

在同一电子表格中的多个工作表上运行基于时间的脚本

提问于
浏览
0

我是GAS的新手,我写了一个脚本来执行价格比较它基本上得到产品的价格,存储它们,并且每天通过基于时间的触发检查,如果价格变化,如果价格变化发送电子邮件,如果什么都没做什

所以现在我被卡住了,我想在电子表格中添加更多工作表,我需要在所有工作表中运行相同的脚本,但我不知道如何管理它 .

据我所知,现在我的脚本基于此功能运行

“var ss = SpreadsheetApp.getActiveSpreadsheet();” ,脚本知道这是活动的电子表格,如果我配置一个基于时间的触发器,它就像一个魅力,但只适用于第一张表 . 我正在寻找使用基于时间的触发器运行脚本,并且此脚本在所有工作表中运行

我怎么能告诉脚本哪个是活动表,当我使用打开的文件时它很清楚,这是活动表,但我不知道如何在脚本运行时设置活动表 .

我已经阅读了一些文档,有些人建议运行一个循环,检查电子表格中的所有工作表,获取名称或ID,并在所有这些工作表中运行脚本 . 几周前我刚刚开始使用javascript和Gas,我一直在使用它,但我无法使它工作

我找到了一些想要做类似事情的人的例子,但我真的不知道代码的所有功能,

这是我发现的循环的一些例子here我希望这段代码得到表格的名称并执行一个函数,但我不是shure .

function CheckSheets() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();
  for(var k=0;k<sheets.length;k++) {  
   excute function checkprice???
   }

这是我的剧本,我不知道我找到的例子是否对我的情况有效

function CheckPrice() {

var ss = SpreadsheetApp.getActiveSpreadsheet();
var source1 = ss.getRange("A27:A145");
var source2 = ss.getRange("B27:B145");
var source3 = ss.getRange("A28:A145").getValues();
var source4 = ss.getRange("E28:E145").getValues();
var source5 = ss.getRange("E27:E145");
var source6 = ss.getRange("A28:A145");




if (source6.isBlank()) {

Browser.msgBox('WAITING FOR DATA !', Browser.Buttons.OK); 
Utilities.sleep(30000);

}


if (source5.isBlank()) {

source1.copyTo(ss.getRange("E27:E145"), {contentsOnly: true});
source2.copyTo(ss.getRange("F27:F145"), {contentsOnly: true});
Browser.msgBox('VALUES COPIED !', Browser.Buttons.OK);
}

  var Inspector = false;
 for(var i=0;i<source3.length;i++)
  {
  if(source3[i][0].toString() !=  source4[i][0].toString())
  {
 Inspector = true;
 }
}

if(Inspector)
{

 MailApp.sendEmail("oker82@gmail.",ss.getSheetName() + " HAS ", ss.getSheetName() + " CHANGED " );

 }
 else
 {
 Browser.msgBox('NOTHING CHANGES !', Browser.Buttons.OK);
 }
 }

1 回答

  • 0

    这是未经测试的,但我认为这是你正在寻找的 .

    function CheckSheets(){
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheets = ss.getSheets();
      for(var k=0;k<sheets.length;k++) {  
        CheckPrice(sheets[k].getName());
       }
     }
    
    function CheckPrice(sheetName){
    
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheetByName(sheetName);
    var source1 = sheet.getRange("A27:A145");
    var source2 = sheet.getRange("B27:B145");
    var source3 = sheet.getRange("A28:A145").getValues();
    var source4 = sheet.getRange("E28:E145").getValues();
    var source5 = sheet.getRange("E27:E145");
    var source6 = sheet.getRange("A28:A145");
    
    
    
    
    if (source6.isBlank()) {
    
    Browser.msgBox('WAITING FOR DATA !', Browser.Buttons.OK); 
    Utilities.sleep(30000);
    
    }
    
    
    if (source5.isBlank()) {
    
    source1.copyTo(sheet.getRange("E27:E145"), {contentsOnly: true});
    source2.copyTo(sheet.getRange("F27:F145"), {contentsOnly: true});
    Browser.msgBox('VALUES COPIED !', Browser.Buttons.OK);
    }
    
      var Inspector = false;
     for(var i=0;i<source3.length;i++)
      {
      if(source3[i][0].toString() !=  source4[i][0].toString())
      {
     Inspector = true;
     }
    }
    }
    

相关问题