Google App Script - TypeError - 无法读取未定义的属性“长度”
在 Google Sheet 中,我有一个自填充的 Twitter 推文列表,我试图过滤掉前一天发布的所有推文。
我一直收到错误:
“无法读取未定义的属性‘length’”
错误出现在代码的最后一行
targetSheet.getRange(1,1,filteredData.length,filteredData[0].length).setValues(filteredData);
function FilterByDate() {
var sSheet = SpreadsheetApp.getActiveSpreadsheet();
var sourceSheet = sSheet.getSheetByName("Tweetz2");
var targetSheet = sSheet.getSheetByName("Tweetz3");
var TodaysDate = new Date();
TodaysDate.setHours(00, 00, 00, 001)
var startDate = new Date(TodaysDate.getTime() - (29 * 60 * 60 * 1000) + (10)); // 24hr + 6hr time zone diff
var endDate = new Date(TodaysDate.getTime() - (5 * 60 * 60 * 1000) + (10)); // 6hr time zone diff
var data = sourceSheet.getDataRange().getValues();
var filteredData = data.filter(dataRow => (dataRow[1] > startDate && dataRow[1] < endDate));
targetSheet.getRange(1,1, filteredData.length, filteredData[0].length).setValues(filteredData);
}
我使用相同的代码在另一张 Sheet 上过滤不同的数据,效果很好。
这是我第一次尝试使用它按日期过滤。
日期时间是 sourceSheet 上的 A 列。
我不明白为什么它在这里不起作用。请帮忙!
问题:
根据您的描述,工作表日期位于 A 列:
Date Time is column A on the sourceSheet.
并且您正在将日期与 B 列中的值进行比较,因为数组是从 0 索引的,并且您使用的是
dataRow[1]
。
因此,您正在将日期与非日期的内容进行比较。因此,
data
中没有元素符合
filter
条件,因此
filteredData
为空。
解决方案:
因此,您应该将此替换为:
var filteredData = data.filter(dataRow => (dataRow[1] > startDate && dataRow[1] < endDate));
使用此:
var filteredData = data.filter(dataRow => (dataRow[0] > startDate && dataRow[0] < endDate));
此外,检查
filteredData
是否具有任何元素可能也是合适的,正如
Rubén 所提到的
:
if(filteredData.length > 0) ...
参考:
尝试将此
varfilteredData = data.filter(dataRow => (dataRow[1] == TargetDate));
更改为:
varfilteredData = data.filter(dataRow => (new Date(dataRow[1]).valueOf() == TargetDate));
将
targetSheet.getRange(1,1, filteredData.length, filteredData[0].length).setValues(filteredData);
替换为
if(filteredData.length > 0) targetSheet.getRange(1,1, filteredData.length, filteredData[0].length).setValues(filteredData);
报告的错误很可能是因为
filteredData
有
0
个元素而发生的。