比较Apps脚本中的两个数组不起作用

时间:2016-03-25 11:10:43

标签: javascript multidimensional-array google-apps-script google-sheets

我是应用脚本的新手,我想做一个价格比较脚本,我有两列,一列通过blockspring addonimport.io获取数据,这提供了有关网站的信息,一列产品名称和其他产品的价格。我想要一些方法在价格变化时注意到我,所以我创建了一个脚本,复制这两列的值,存储它们,当我触发它时,它从两列获取数据并进行比较,现在用于测试我有一个简单的变换框,告诉我一些数据是否有变化。

现在,我能够编写一个获取值并进行比较的脚本,但由于某些未知原因,它不起作用。

这是我的剧本。也许在将来我想提醒哪些数据发生了特别的变化,但这是我的第一个脚本儿子,我试着放轻松。

这是我正在使用的电子表格

https://docs.google.com/spreadsheets/d/1HleYu-dCbUReOH-7SnEFipJa6E9wEcEzasQ7ns2tXso/edit?usp=sharing

function moveValuesOnly() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var source1 = ss.getRange("A15:A105");
  var source2 = ss.getRange("B15:B105");
  var source3 = ss.getRange("A16:A105").getValues();
  var source4 = ss.getRange("E16:E105").getValues();
  var source5 = ss.getRange("E15:E105");

  if (source5.isBlank()) {

  source1.copyTo(ss.getRange("E15:E105"), {contentsOnly: true});
  source2.copyTo(ss.getRange("F15:F105"), {contentsOnly: true});
  Browser.msgBox('VALUES COPIED !', Browser.Buttons.OK);
}


if (source3 == source4) {
 Browser.msgBox('NOTHING CHANGES !', Browser.Buttons.OK);
}

 else {
 Browser.msgBox('SOMETHING CHANGES!', Browser.Buttons.OK);
}

}

2 个答案:

答案 0 :(得分:0)

无法通过==方法比较数组。您需要遍历每个元素并进行比较。

var Inspector = false;
for(var i=0;i<source3.length;i++)
{
 if(source3[i][0].toString() !=  source4[i][0].toString())
 {
 Inspector = true;
 }
}

if(Inspector)
{
 Browser.msgBox('SOMETHING CHANGES!', Browser.Buttons.OK);
}
else
{
Browser.msgBox('NOTHING CHANGES !', Browser.Buttons.OK);
}

答案 1 :(得分:0)

您无法比较这样的范围,因为它们是二维数组。我修改了你的代码并包含了一个比较2列的函数。它不适用于包含更多列的范围,但如果需要,可以很容易地增强它。

function moveValuesOnly() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var source1 = ss.getRange("A15:A105");
  var source2 = ss.getRange("B15:B105");
  var source3 = ss.getRange("A16:A105").getValues();
  var source4 = ss.getRange("E16:E105").getValues();
  var source5 = ss.getRange("E15:E105");

  if (source5.isBlank()) {

    source1.copyTo(ss.getRange("E15:E105"), {contentsOnly: true});
    source2.copyTo(ss.getRange("F15:F105"), {contentsOnly: true});
    Browser.msgBox('VALUES COPIED !', Browser.Buttons.OK);
    }

  function equalColumns(col1, col2) {

    if (col1.length !== col2.length) return false;
    var equal = true;
    for (var i = 0; i < col1.length; i ++) {    
      if (col1[i][0] !== col2[i][0])  {        
        equal = false;
        break;
      }
    };    
    return equal;
  }


if (equalColumns(source3,source4)) {

    Browser.msgBox('NOTHING CHANGES !', Browser.Buttons.OK);
    }

  else {
    Browser.msgBox('SOMETHING CHANGES!', Browser.Buttons.OK);
    }

}