使用Google应用脚本

时间:2016-12-06 07:55:50

标签: javascript arrays google-apps-script

我有一个谷歌电子表格,这是一个2列的表,在列A日期(我确定是日期,所有日期函数在所有列上正常工作)和B列文本。

使用谷歌应用程序脚本,我得到了范围的所有值:

var sheet = SpreadsheetApp.openById(".........");
var ss = sheet.getSheetByName(".......");
var range =ss.getRange(1,1,ss.getLastRow(),ss.getLastColumn());
var data =  range.getValues();

现在我应该有一个2d数组,其中包含数据[0]上的日期和数据[1]

上的文本

我可以使用:

过滤数据[1]上的数组
var filter = data.filter(function (dataRow) {
return dataRow[1] == 'sometext';
});

我需要的是按一些日期值(如年份,月份或期间)过滤数据[0]

我试过了:

var filter = data.filter(function (dataRow) {
return dataRow[0].getFullYear == 2016;
});

但是任何类型的日期函数都会给我一个错误,指出在对象中找不到函数(比如getFullYear())。

我做错了什么?

感谢您的帮助

祝你好运

3 个答案:

答案 0 :(得分:5)

我已经创建了一个类似的电子表格(第一列包含文字,第二列包含日期)和以下脚本:

function myFunction() {
  var sheet =  SpreadsheetApp.openById("…");
  var ss    = sheet.getSheetByName("testing");
  var range = ss.getRange(1,1,ss.getLastRow(),ss.getLastColumn());
  var data  = range.getValues();

  var filtered = data.filter(function (row) {
    return row[1].getFullYear() === 2016;
  });

  Logger.log(filtered);
}

只要第二列是日期类型(格式→数字→日期),它就可以工作。如果我将类型更改为Text,我会收到您所描述的错误。如果您的代码中没有错误(例如.getFullYear而不是.getFullYear(),因为它是一个功能,而不是属性),我认为数据(不是变量,而是电子表格' s data)不是Date类型。

答案 1 :(得分:0)

Date方法可以在Date上使用Date对象而不是text。变量dataRow [1]中的内容只是一个字符串,而不是Date对象。因此它没有那种方法。

答案 2 :(得分:0)

试试这个

var filtered = data.filter(function (row) {

  var d = new Date( row[1] ); // change text to Date object
  return  d.getFullYear() === 2016; // then compare

});