数据透视表筛选条件由数据数组使用谷歌工作表(脚本)问题



我想做的是,我们将数据转储到谷歌表单上的预付费文件中,有人输入"起始日期",这意味着该预付费项目计划在X个月开始转移到费用中。3月份的例子是我的文件,显然有3月份的日期,甚至包括2019年之前的几个月(因为它是预付的(,我也有4月和5月的日期,因为发票提前提交。我想做的是创建一个谷歌脚本,过滤少于当前月份的所有内容,以便能够发布正确的时间框架(所以我只想关注3月和3月之前的数据。

这是我的循环。。

function PivotTest() {
var pull = SpreadsheetApp.getActive().getSheetByName("Pull");
var lr = pull.getLastRow();
var criteriadate = pull.getRange(2,1).getValue();
var pullrawdata = pull.getRange(5,31,lr,1).getValues();
var Pulld= []
for (var i = 0; i< pullrawdata.length ; i++){ 
if (pullrawdata[i][0] <= criteriadate)
{
Pulld.push(pullrawdata[i])
}
}

其中criteriadate是我们所在月份的公式(eomonth(today((,0(;然后我有一堆行添加我的其他数据透视表信息(我的标准在底部(的代码。。。

var criteria = SpreadsheetApp.newFilterCriteria() .setVisibleValues([Pulld]) .build(); pivotTable.addFilter(31, criteria);

Pullrawdata是数据集的日期或"起始日期",我一直试图将它们移动到类似的格式,但问题是,当我的数据透视表创建时,它不会被任何内容过滤,所以我去显示我的Pulld数组输出,它的格式与日期的数据格式完全不同,因此与criteriadate不同。我被难住了,请帮帮我。我是否无法按数组筛选可见值,即使当我显示数组时它是正确的,因为中不包括四月/五月的数据?

如何比较日期

日期对象不能直接相互比较。

相反,您可以使用函数getTime((将Unix Epoch以来的日期转换为毫秒。

样品:

if (pullrawdata[i][0].getTime() <= criteriadate.getTime()){...

请注意,getTime()只有在其应用对象的格式正确识别为日期的情况下才能工作——如果将其应用于字符串,则会引发错误。

我解决了这个问题。我没有使用日期作为过滤器,而是将日期转换为毫秒,并将其用作过滤器。这纠正了格式化问题的输出,使criteriadate与Pulld数组的格式相同,并以这种方式完成了过滤器。

谢谢你的帮助!

最新更新