根据日期确定特定的行

时间:2020-08-08 10:51:49

标签: javascript datetime google-apps-script google-sheets

此代码的作用是根据输入(日期)标识数组的行,并返回与输入日期关联的值。

但是,此for循环不起作用,因为它不遵守if条件,并且始终返回数组的最后一行。

function viewData() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var formSS = ss.getSheetByName("Overall Cashflow"); //Data entry Sheet
  var datasheet = ss.getSheetByName("Cashflow Tracker Data"); //Data Sheet
  var data = datasheet.getDataRange().getValues();
  var date = formSS.getRange("H5").getDisplayValue();
  
  for (var i = 0; i < data.length; i++){ 
        if (data[i][0] == date) {
           break; 
        }
        var oldinflow = data[i][1];
        var oldoutflow = data[i][2]; 
  }
  

  formSS.getRange("H8").setValue(oldinflow);
  formSS.getRange("H11").setValue(oldoutflow);
}

2 个答案:

答案 0 :(得分:1)

您需要获取日期对象的 valueOf()

尝试一下:

function viewData() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var formSS = ss.getSheetByName("Overall Cashflow"); //Data entry Sheet
  var datasheet = ss.getSheetByName("Cashflow Tracker Data"); //Data Sheet
  var data = datasheet.getDataRange().getValues();
  var date = formSS.getRange("H5").getValue().valueOf();
  
  for (var i = 0; i < data.length; i++){ 
        if (data[i][0].valueOf() == date) {
           break; 
        }
        var oldinflow = data[i][1];
        var oldoutflow = data[i][2]; 
  }
  

  formSS.getRange("H8").setValue(oldinflow);
  formSS.getRange("H11").setValue(oldoutflow);
}

答案 1 :(得分:0)

getValues()可能为包含“日期”的单元格返回Date对象,另一方面,getDisplayValue()将返回一个字符串。这可以解释为什么(data[i][0] == date无法正常工作。

要防止可能出现的快速且肮脏的解决方案足够好,请使用getValues(),而不要使用getDisplayValues()