私は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);
}
}