-1

は、私は次のようなデータを持っている:GSheetsにユーザー入力の検証/ Javascriptを

Task | Number 
A  |  1 
B  |  2 
C  |  2 
D  |  3 
E  |  3 
F  |  3 

2つの列があります。タスクを持つものと値を持つもの。私の目標は、ユーザーがタスクや数字を入力するとGoogleスプレッドに表示され、他のすべての数字に対してコードがチェックされることです。

たとえば、上記のデータがあり、再度入力した場合

F | 3

このユーザー入力を拒否するコード

以下はコードです。私はそれを実行している、と警告ボックスに、式

ss.getRange(i, 2).getValue() == ss.getRange(rng.getRow(), rng.getColumn()).getValue() 

は一様にfalseに検証します。したがって、次のコードは3 == 3が実際には偽の宣言であることを宣言します。問題はなぜですか?そして、どうすればこの問題を解決できますか?

function checkEntry(){ 

    //store the range as that cell 
    var rng = ss.getRange(8, 2) 

    //ui.alert(rng.getValue()); 
    var dict = {} 
    var i = 2 
    var k = 1 

    //check the sheet 
    for(i=2;i<=last;i++){ 
    ui.alert(ss.getRange(i, 2).getValue()); 
    ui.alert(ss.getRange(rng.getRow(), rng.getColumn()).getValue()); 

    ui.alert(ss.getRange(i, 2).getValue() == ss.getRange(rng.getRow(), rng.getColumn()).getValue()); 


    } 
+0

"last"が定義されていないため、コードはまったく実行されません。 [mcve]を参照してください。また、(8,2)は8行目にあり、サンプルデータにはありません。最後に、コードにループ内でgetRange()。getValue()の束がある場合、あなたはApps Scriptを間違って使用しています。ループの前に 'getRange'を1回呼び出す必要があります。範囲はこの関数でアクセスしたいすべてのデータです。 – FTP

答えて

0

私はこれがうまくいくと思います。

function checkEntry(){ 
    var ss=SpreadsheetApp.getActive(); 
    var sh=ss.getActiveSheet(); 
    var rng=sh.getDataRange(); 
    var vA=rng.getValues(); 
    var u=[];//uniques 
    var r=[];//duplicates 
    for(var i=1;i<vA.length;i++){ 
    var s=vA[i][0].toString()+vA[i][1].toString(); 
    if(u.indexOf(s)==-1){ 
     u.push(s); 
    }else{ 
     r.push(i); 
    } 
    } 
    for(var i=vA.length-1;i>0;i--){ 
    if(r.indexOf(i)>-1){ 
     sh.deleteRow(i+1);//delete duplicates 
    } 
    } 
}