2010-12-14 20 views
4

以下はGoogleドキュメントスプレッドシート用のスクリプトです。Javascriptの設定フラグ

これらのリンクは、私がやっているかを示す:私は「フラグ」私は、このスクリプトをもう一度実行すると、それはしないように設定することができますどのように

http://i.stack.imgur.com/uGik7.png

http://i.stack.imgur.com/AbKnQ.png

以前に追加された在庫アイテムを追加しますか?

function myFunction() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet1 = ss.getSheetByName("Purchase Orders"); 
    var sheet2 = ss.getSheetByName("Inventory"); 
    var data = sheet1.getDataRange(); 
    var i_data = sheet2.getDataRange(); 
    var lastRow = data.getLastRow(); 
    var iLastRow = i_data.getLastRow(); 

    for (i=1;i<=lastRow;i++) { 
    if (data.getCell(i, 5).getValue() == "stock"){ 
     for (n=1;n<=iLastRow;n++){ 
     if (data.getCell(i,3).getValue() == i_data.getCell(n,3).getValue()) { 
     i_data.getCell(n, 1).setValue(i_data.getCell(n,1).getValue() + data.getCell(i,2).getValue()); 
     } 
     } 
    } 

    } 
}​ 

私はこれをやろうとしていると思います。アイテムが在庫に追加されると、その行の列iにxが追加されます。スクリプトが再び実行されると、列iのxを持つ行をスキップします。

答えて

2

JavaScriptでは、関数はオブジェクトです。オブジェクトにはプロパティがあります。だから、あなたの関数を飾る:

function myFunction() { 
    if (!myFunction.alreadyDoneRunIt) { 
     alert('bapt uia'); 
     myFunction.alreadyDoneRunIt = true; 
    } 
} 

for (var i = 0; i < 10; i++) { 
    myFunction(); // alerts once 
} 
+0

私は理解できません。 "alreadyDoneRunIt ??" – David

3

フラグ値を保持するセルを指定し、その特定のセルでフラグ値をチェックします。

+0

これを行うにはどうすればいいですか?アイテムがインベントリに追加されると、その行の列iにxが追加されます。その後、スクリプトを再実行すると、列iのxを含む行がスキップされます。 – David

+0

これはおそらくすでに解決済みですが、任意の値を返します。 Xの列には問題は完全に解決されます。 スプレッドシート自体に の各行が処理されたことを示すフラグを格納して、 シートを閉じるときにその情報が失われないようにします。さらに、特定の行が処理されたかどうかを知りたい場合は、 を使用することもできます。 –

1

最初に値を配列に追加します。アイテムを追加するたびに配列をチェックして、配列がすでに入っているかどうかを確認します。その後、配列をループしてUIにポストします。

ここに、配列に既に値が含まれているかどうかを確認するための記事があります。 stackoverflow.com/questions/237104/

+0

私は少し混乱しています。例を挙げていただけますか? – David

+0

検索のために配列を使用しないでください。ハッシュを使用してください。 –

関連する問題