Javascript 根据日期标识特定行
这段代码的作用是根据输入(日期)标识数组的行,并返回与输入日期关联的值 但是,这个for循环不起作用,因为它不考虑if条件,并且总是返回数组的最后一行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 =
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()
。要获得更好的答案,请添加一些数据样本和相应的预期结果。谭维明您能尝试一下我更新的答案吗?