2017-05-14 11 views
1

私はどこでも見て、このボードで関連する質問を見ましたが、私は本当に立ち往生しています。Google App Scriptキャッチ行番号

シートの実際の行の値を取得するには、ifステートメントに基づいてforループを繰り返します。

コードの他の部分では、フォームの応答シートのコピーを作成し、それをフォルダに移動する必要があります。私はすでに作成されているシートに作成されている新しいファイルのファイルIDをログに記録しようとしています(そしてスクリプトはメニューから呼び出されています)。

私はデータと値を取得し、それらを繰り返し、ログのすべてを見ることができます。私は他の同様の質問などで見たものに基づいて、getActiveRange()。getRow()の部分を試しましたが、フォームが開いているときにカーソルがある正確な行に対してのみ機能します。私は、スクリプトが現在見ている行に基づいてforループを経てActiveRow変数を動的に設定できる必要があります。

if文が列内の文字列値 "NOT FOUND"を探しているだけなので、forループ変数を現在の行(j + 1)として使用することはできないため、 "j"変数値は更新する行の値と必ず一致します。

ありがとうございました!

// Get the active spreadsheet and the active sheet 
var ssEXD = SpreadsheetApp.getActive().getSheetByName('FormData'); 
var lastRowEXD = ssEXD.getLastRow(); 
var lastColumnEXD = ssEXD.getLastColumn(); 
var formIDValues = ssEXD.getSheetValues(2, 1, lastRowEXD-1, lastColumnEXD); 

//Loop through the returned values 
for(var j = 0; j < formIDValues.length; j++) {  

    //if NOT FOUND is true, do stuff 
    if (formIDValues[j][6] == "NOT_FOUND") { 

    //need this variable to be the exact row of the sheet value data 
    var ActiveRow = ssEXD.getActiveRange().getRow(); 
    //I need to use the ActiveRow in the getActiveRange to update the sheet with some information. 
    ssEXD.getRange(ActiveRow,6,1).setValue("testing"); 

    } 

} 

答えて

0

質問を正しく読んでいると、データの最初の行に列名があり、データが2番目の行に始まります。

だから、これはあなたが望むものを達成すると思います。

var ssEXD = SpreadsheetApp.getActive().getSheetByName('FormData'); 
var lastRowEXD = ssEXD.getLastRow(); 
var lastColumnEXD = ssEXD.getLastColumn(); 
var dataR = ssEXD.getDataRange(); 
var dataA = dataR.getValues(); 
for(var j = 1; j < dataA.length; j++) 
{  
    if (dataA[j][6] == "NOT_FOUND") 
    { 
    dataA[j][6] = "testing"; 
    } 
} 
dataR.setValues(dataA); 
+0

こんにちはクーパー、応答とコードの更新をありがとうございます。これを見ている人には、配列の列の値を更新することを覚えておいてください。最初はゼロではなく、1から始まっています。私はそれを分かった。私はそれを理解するようにフォローアップの質問。 setValuesメソッドは、forループまたはifループの外側の行をどのように追跡しますか?それはどのように機能するのですか?正しい方法で私を指摘してくれてありがとう、特にifステートメントの変数を再設定することに感謝します。 –

+0

スプレッドシートの行と列は1つから始まります。 getValues()によって作成された配列の行と列はゼロから始まります。したがって、行1および列1のセル内のデータは、dataA [0] [0]と同じデータです。 setValues()を実行するときに、dataRが同じサイズであることを確認してください。配列は2次元でなければなりません。 – Cooper

0
var ActiveRow = j + 2; 

アレイ(formIDValues)がシートから抽出された後、アレイは、そのシートにもはや関係がありません。配列内の作業項目のインデックスをスプレッドシートの行番号に合わせる必要があります。

J - 配列インデックスは、 - jはj変数約+ 2

あなたの関心事従って、このスプレッドシートの2行目で不当であるゼロから始まります。 jは、テストがパスされたかどうかにかかわらず、ループを通過するたびにインクリメントされます。

関連する問題