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

时间:2016-04-05 15:33:17

标签: javascript google-apps-script google-sheets

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

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

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

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

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

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

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

以下是我发现here循环的一些示例,我希望此代码获取工作表的名称并执行函数,但我并不是真的。

  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 :(得分: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;
 }
}
}