比较应用程序脚本中的两个数组不起作用



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

目前,我可以编写一个脚本来获取值并进行比较,但由于某种未知的原因,它不起作用。

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

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

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);
}
}

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

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);
}

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

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);
    }
}

最新更新