在IF语句中比较'=='不能正常使用Google表格脚本

时间:2020-05-15 06:17:44

标签: javascript google-apps-script

目标是将Orders工作表中的ColA与Ordered Items工作表中的ColF进行比较,如果它们匹配,则从ColB中抢夺email

该脚本未输出任何错误,但与任一工作表中突出显示的单元格都不匹配。

(注意:这些项目是由应用自动添加的,因此单元格的格式为默认格式,因此当我使用后6位数字作为订单代号(例如49.263Z)时,必须保持这种格式)

Orders

enter image description here

Ordered Items

enter image description here

function getEmailFromOrderedItemToOrders(){

  var orders = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Orders');

  var lr = getLastRow(orders, "A1:G");

  Logger.log(lr); //LastRow index

  //Get last 'OrderID (Paid at)' value from 'Orders' sheet
  var orderIdCol = 1;
  var orderId = orders.getRange(lr, orderIdCol).getValue(); 
  Logger.log(orderId); //LastRow 'orderId' value

  //Match 'orderId' to 'orderId' in 'Ordered Items' and return col 1
  var items = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Ordered Items');
  var itemsData = items.getDataRange().getValues();
  Logger.log(itemsData[0][1]); //'Purchase Email' col
  Logger.log(itemsData[0][5]); //'Paid at' col

  for(var i = 0; i<itemsData.length;i++){


    if(itemsData[i][5] == orderId){ //Issue here: not comparing values as a match
      var email = itemsData[i][1];
      Logger.log(email); //Does not print
      return i+1;
    }
  }

}

2 个答案:

答案 0 :(得分:1)

这可以通过使用表格公式简单地解决。您将要做的是:

=INDEX( 'Ordered Items!B:B', MATCH(A2, 'Ordered Items!:F:F,0) )

公式基本上说:

  • 返回电子邮件列
  • 在“订购商品F:F”列中查找A2值所在的索引(行号)

请参见此处的教程:https://www.youtube.com/watch?v=9sLWDjAEuyc

答案 1 :(得分:1)

在javascript中,当您比较两个new Date时,您将得到的值为false

原因是当您有两个日期时,它基本上是两个不同的对象。因此,在使用== or ===时,一个对象不等于另一个对象。因此,一种简单且更好的方法是使用.getTime()将日期转换为数字,该方法将返回从该日期到1970年1月1日的00:00:00经过的毫秒数。

示例代码段

console.log(new Date() === new Date())

console.log(new Date().getTime() === new Date().getTime())

相关问题