【问题标题】:Pivot Table filter criteria by a data array using google sheets (script) problems使用谷歌表格(脚本)问题通过数据数组过滤数据透视表条件
【发布时间】:2020-04-15 02:15:37
【问题描述】:

我想要做的是,我们将数据转储到谷歌表格上的预付费文件中,有人输入“开始日期”,这意味着这个预付费项目计划在 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 是数据集的日期或“起始日期”,我一直试图将它们移动到类似的格式,但问题是当我的数据透视表创建时它不会过滤任何东西,所以我去显示我的拉数组输出,它的格式与日期的数据格式完全不同,因此与标准日期不同。我被难住了,请帮忙。我是否无法通过数组过滤可见值,即使当我显示数组时它是正确的,因为不包括四月/五月的数据?

【问题讨论】:

    标签: google-apps-script google-sheets filter pivot


    【解决方案1】:

    如何比较日期

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

    您可以改为使用函数getTime() 将日期转换为自 Unix 纪元以来的毫秒。

    示例:

    if (pullrawdata[i][0].getTime() &lt;= criteriadate.getTime()){...

    请注意,getTime() 仅在应用它的对象以正确识别为日期的方式格式化时才有效 - 如果它应用到字符串,则会引发错误。

    【讨论】:

    • 你好 Ziganotschka,谢谢你,你能澄清这个评论吗?我怀疑这是我正在寻找的答案,但我确实尝试将 gettime() 纳入我的工作中并且没有成功。也许我在这个问题上没有足够的开箱即用,但我的 for 声明和 Pulld 的输出正好给了我我需要的东西,但输出是 2020 年 3 月 31 日星期二 00:00:00 GMT-0400(太平洋等)和数据透视表选择仅为 2020 年 3 月 31 日(格式与原始数据相同)。所以我认为这就是为什么它根本没有选择任何标准,因为这种差异?我可能错了
    • 3/31/2020 是日期对象还是字符串?您可以使用 Logger.log(typeof "name of your variable"); 对其进行测试。如果不能正确识别为日期,可以使用var newDate = new Date(datestring); 将其从字符串转换为日期
    • 而且我无法将 getTime() 方法应用于 Pulld 的数组,因为它有多个选择项来更改我的输出。我确定原因是因为数组被认为是字符串?
    • 您不需要将getTime() 应用于整个数组 - 只需应用于您要比较的日期对象。
    • 我不能正确转换项目,因为当我尝试在标准日期上使用它并拉出它们时,即使没有转换,它们也会返回对象。对不起,这部分对我来说显然是新的。
    【解决方案2】:

    我能够解决问题。我没有将日期用作过滤器,而是将日期转换为毫秒并将其用作过滤器。这更正了格式问题的输出,因此标准日期与拉数组的格式相同,并且它可以以这种方式完成过滤器。

    感谢您的帮助!

    【讨论】:

      猜你喜欢
      • 2016-05-27
      • 1970-01-01
      • 2018-01-29
      • 1970-01-01
      • 1970-01-01
      • 2018-07-13
      • 1970-01-01
      • 1970-01-01
      • 2016-12-24
      相关资源
      最近更新 更多