开发者问题收集

Google App Script - TypeError - 无法读取未定义的属性“长度”

2021-04-09
605

在 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 列。

我不明白为什么它在这里不起作用。请帮忙!

3个回答

问题:

根据您的描述,工作表日期位于 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) ...

参考:

Iamblichus
2021-04-09

尝试将此 varfilteredData = data.filter(dataRow => (dataRow[1] == TargetDate)); 更改为: varfilteredData = data.filter(dataRow => (new Date(dataRow[1]).valueOf() == TargetDate));

Cooper
2021-04-09

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);

报告的错误很可能是因为 filteredData0 个元素而发生的。

Wicket
2021-04-09