2017-05-05 12 views
0

タイムリーな方法でこれを把握することはできませんし、誰かが私にこの方法を間違った方法で伝え、私は、ある範囲のセルを強調表示し、ボタンをクリックすることによってアクティブになるスクリプトを持っています。選択が適切であることを確認するために最初に行われるいくつかのエラーチェックがあります。そして、これはコードの実際の邪魔です。すべてうまくいきますが、私が解決できない唯一のバグは、if文が肯定を返さないため、スキップされ、実際のアクションを実行せずにコードが終了するということだけです。私は、各変数から期待されるデータの下にコメントしました。 Pls halp!Google AppsスクリプトでIF文の有効性が確認されない

var source = SpreadsheetApp.getActiveSheet(); 
var sA1 = source.getActiveRange().getA1Notation(); 
var sdata = source.getRange(sA1).getValues(); 
var samtpaid = source.getRange(sA1).offset(0, 8, sdata.length, 1).getValues(); 
var sdate = source.getRange("J2").getValue(); 


var target = SpreadsheetApp.openById("...sheetid...").getSheetByName("...sheetname..."); 

対象のスプレッドシートは、SDATAに含まれていないSDATAと、より多くのレコード内のすべてのデータを持っています。

var trange = target.getDataRange(); 
    var tvalues = target.getDataRange().getValues(); 
    var trangesize = target.getDataRange().getLastRow(); 

    for (var i = 0; i < sdata.length; ++i) { 
    var row = sdata[i]; 
    var row2 = samtpaid[i]; 
    var row3 = sdate; 

    for (var j = 0; j < trangesize; ++j) { 
    var trow = tvalues[j]; 

    if (row[0] == trow[0]){ 

行[0]をトロウ[0] ...メッセージボックスでデバッグするとき、値は(それが一致するレコードが見つかった場合に)完全に同じであるように見え、これが理由であり、タイムスタンプであります私はその取引が何であるか把握できません。

if (row[6] == trow[1]){ 

if文の行は、[6]のメールアドレスであるので、トロウがある[1] ...コードは、それが通過するかどうかを確認するために、このにそれを作ったことがないが、値は正確に一致

ように見えます
trange.offset(0, 17, 1, 1).setValues(row2[i]); 
    trange.offset(0,18,1,1).setValue(row3); 

    } //end inner if 

    } //end outer if 

    } //end inner for 

    } //end outer For 
+0

'row [6] .toString()'を使って各変数の文字列値をチェックして、テキスト自体を比較してみてください。 – Brian

+0

@BrianBennettありがとうございました。なぜこれが必要なのかについて何か説明がありますか?私は自動生成されたタイムスタンプのセルと別のシートのタイムスタンプのセルを比較しています...いずれかの方法で動作するはずです。 – David

+0

'.getValues()'はObjectを返します。 JavaScriptでは、オブジェクトの等価は値参照ではなく、メモリ参照されます。したがって、文字列は等しいが、メモリ内のそれらの場所は異なり、falseを返します。 [この記事](http://adripofjavascript.com/blog/drips/object-equality-in-javascript.html)には大きな説明があります。 – Brian

答えて

0
if (row[0].toString() == trow[0].toString()){ 
if (row[6] == trow[1]){ 

マイナーアップデートがすべて必要でした。日付/時刻を比較するのではなく、文字列を比較することが道でした。

trange.offset(j,17,1,1).setValue(row2); 
trange.offset(j,18,1,1).setValue(row3); 

マイナーアップデートここで私はrow2 [i]は必要ありませんでしたが、row2だけで十分でした。また、numRowsのオフセットとしてj(0ではなく)を使用すると、コードがループするたびに上の行だけではなく、適切な場所に値が追加され、上書きされます。

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

関連する問題