Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 根据日期标识特定行_Javascript_Datetime_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript 根据日期标识特定行

Javascript 根据日期标识特定行,javascript,datetime,google-apps-script,google-sheets,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 =

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

但是,这个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);
}
函数viewData(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var formSS=ss.getSheetByName(“总现金流”);//数据输入表
var datasheet=ss.getSheetByName(“现金流跟踪器数据”);//数据表
var data=datasheet.getDataRange().getValues();
变量日期=formSS.getRange(“H5”).getDisplayValue();
对于(var i=0;i
您需要获取日期对象的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);
}
函数viewData(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var formSS=ss.getSheetByName(“总现金流”);//数据输入表
var datasheet=ss.getSheetByName(“现金流跟踪器数据”);//数据表
var data=datasheet.getDataRange().getValues();
var date=formSS.getRange(“H5”).getValue().valueOf();
对于(var i=0;i
getValues()
可能会为包含“日期”的单元格返回日期对象,另一方面
getDisplayValue()
将返回字符串。这可能解释了为什么
(数据[i][0]==date
不起作用


为了防止出现快速而肮脏的解决方案,最好不要使用
getValues()
,而是使用
getDisplayValues()

它不起作用:(
==
将测试内存中两个对象的地址。当您通过
.getValue()
检索一个值,通过
.getValues()检索“相同”值时)
,生成的内存位置将比较为false。要对日期对象使用
==
,您必须说
range.getValue().valueOf()==bigRange.getValues()[i][j].valueOf()
。要获得更好的答案,请添加一些数据样本和相应的预期结果。谭维明您能尝试一下我更新的答案吗?