在GSheets / Javascript

时间:2017-11-30 21:44:19

标签: javascript validation google-apps-script google-sheets logic

我的数据如下所示:

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

有两列。一个是任务,另一个是值。我的目标是使用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());


  }

1 个答案:

答案 0 :(得分: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
    }
  }
}