2016-04-05 10 views
0

私はGASを初めて使用しているため、価格比較を行うスクリプトを作成しました。これは基本的には製品の価格を取得し、何も変更がなければ価格変更が電子メールを送信した場合、この価格が変更されるかどうかをチェックします。同じスプレッドシート内の複数のシートに時間ベースのスクリプトを実行する

だから私はスタックしている、私はスプレッドシートにシートを追加したいすべてのシートで同じスクリプトを実行する必要があるが、私はそれを管理する方法を知らない。今、私のスクリプトでそれが

この機能に基づいて実行されます私の知る限りでは

、 "VaRのSS = SpreadsheetApp.getActiveSpreadsheet();"スクリプトはアクティブなスプレッドシートであることを知っています。時間ベースのトリガーを設定すると、チャームのように機能しますが、最初のシートでのみ動作します。私は時間ベースのトリガーでスクリプトを実行するために幾分かを探していて、このスクリプトはすべてのシートで実行されます

オープンドキュメントアクティブなシートですが、スクリプトの実行中にアクティブシートを設定する方法はありません。

私はいくつかのドキュメントを読んでおり、スプレッドシート内のすべてのシートをチェックするループを実行し、名前またはIDを取得し、このシートすべてでスクリプトを実行することをお勧めします。私はちょうど数週間前にjavascriptとガスで始まったばかりですが、私はそれを使って作業していましたが、うまく動作しませんでした。

私は同様のことをしたい人の例をいくつか見つけましたが、

ここに私が見つけたループのいくつかの例があります。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("[email protected]",ss.getSheetName() + " HAS ", ss.getSheetName() + " CHANGED "); 

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

答えて

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; 
} 
} 
} 
関連する問題