我正在尝试将用户指定的日期与另一张纸上的数据库中的日期进行比较。该脚本应返回具有匹配日期的任何行的指定列。当前,它返回所有数据。无论值如何,似乎IF语句始终读为true。日志显示值不同。为什么该IF语句总是返回true,从而返回所有数据库行?下面的代码:
function search()
{
//clears contents in search sheet (sheet1)
var app=SpreadsheetApp;
var WorkSheet = app.getActiveSpreadsheet().getSheetByName("Sheet1");
WorkSheet.getRange("A2:D50").clearContent();
//store date search value - getrange x and get it's value
var DateSearch = WorkSheet.getRange(1,2).getValue();
//view variable for testing
Logger.log(DateSearch);
//data sheet lastrow variable
var dataSheet = app.getActiveSpreadsheet().getSheetByName("Form Responses
1");
var a = dataSheet.getDataRange().getNumRows();
//view variable for testing
Logger.log(a);
//var i is looper
var i;
var dataI;
var copyValue;
//view if statement value for testing
for(i=2;i<=a;i++)
{
Logger.log(i);
dataI = dataSheet.getRange(i,1).getValue();
Logger.log(dataI);
Logger.log(DateSearch);
if (dataI = DateSearch)
{
// returns values in variable row and first 2 columns if condition is met
copyValue = dataSheet.getRange(i, 1, 1, 2).getValues();
//test copyValue
Logger.log(copyValue);
WorkSheet.getRange(i,1,1,2).setValues(copyValue);
}
}
}
答案 0 :(得分:0)
此修改如何?
if (dataI = DateSearch)
,当DateSearch
有一个值时,它始终作为true
使用。这样,每次if
为true
时的脚本都会起作用。为了反映以上几点,请进行以下修改,然后再次尝试运行。前者和后者分别比较Unix时间和每年,每月和每天。您可以选择2个样本之一。
从:if (dataI = DateSearch)
至:
if (new Date(dataI).getTime() === new Date(DateSearch).getTime())
或
至:if (new Date(dataI).getFullYear() === new Date(DateSearch).getFullYear() &&
new Date(dataI).getMonth() === new Date(DateSearch).getMonth() &&
new Date(dataI).getDate() === new Date(DateSearch).getDate())
顺便说一句,从脚本和示例电子表格来看,可以认为当数据数量变大时,处理时间将变长。因此,作为针对这种情况的其他修改,该怎么办?但是我不确定这对您的情况是否有用。因此,请将此作为示例脚本。
function search() {
var app=SpreadsheetApp;
var WorkSheet = app.getActiveSpreadsheet().getSheetByName("Sheet1");
WorkSheet.getRange("A2:D50").clearContent();
var DateSearch = WorkSheet.getRange(1,2).getValue();
var dataSheet = app.getActiveSpreadsheet().getSheetByName("Form Responses 1");
// Below script was modified.
var dataI = dataSheet.getDataRange().offset(1, 0).getValues();
var copyValue = dataI.map(function(e, i) {
return new Date(e[0]).getTime() === new Date(DateSearch).getTime() ? e : ["", ""];
});
WorkSheet.getRange(2,1,copyValue.length,copyValue[0].length).setValues(copyValue);
}
如果此结果不是您想要的,请告诉我。我想修改它。
此修改脚本将没有空行的检索到的值放入第2行。
function search() {
var app=SpreadsheetApp;
var WorkSheet = app.getActiveSpreadsheet().getSheetByName("Sheet1");
WorkSheet.getRange("A2:D50").clearContent();
var DateSearch = WorkSheet.getRange(1,2).getValue();
var dataSheet = app.getActiveSpreadsheet().getSheetByName("Form Responses 1");
// Below script was modified.
var dataI = dataSheet.getDataRange().offset(1, 0).getValues();
var copyValue = dataI.filter(function(e) { // Modified
return new Date(e[0]).getTime() === new Date(DateSearch).getTime(); // Modified
});
WorkSheet.getRange(2,1,copyValue.length,copyValue[0].length).setValues(copyValue);
}