Критерии фильтрации сводных таблиц по массиву данных с использованием таблиц Google (сценарий) - PullRequest
0 голосов
/ 13 апреля 2020

То, что я пытаюсь сделать, это то, что мы получаем данные в файл предоплаты на листах Google, когда кто-то вводит «С даты», что означает, что этот элемент с предоплатой должен начать переводиться на расходы в Х месяце. Примером марта является файл, который у меня, очевидно, имеет даты марта и даже месяцы, в том числе до 2019 года (потому что он предоплачен), и у меня также есть даты апреля и мая, потому что счета выставляются рано. Я пытаюсь создать скрипт Google, который фильтрует все, что меньше текущего месяца, чтобы иметь возможность отправлять правильные временные рамки (поэтому я хочу сводить данные только за март и до марта.

Вот мой l oop ..

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])
 }
}

Где критерий - это формула месяца, в котором мы находимся (eomonth (today (), 0); тогда у меня есть несколько строк, добавляющих мои другие Информация сводной таблицы (моя крита внизу) кода ...

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

Pullrawdata - это даты набора данных или «С даты», и я продолжаю пытаться чтобы переместить их в похожий формат, но проблема в том, что, когда создается моя сводная таблица, она не фильтруется по чему-либо, поэтому я go показываю мой вывод массива Pulld, и он полностью отличается от форматирования данных даты , который, следовательно, отличается от критерия. Я озадачен, пожалуйста, помогите. Не могу ли я отфильтровать видимые значения по массиву, хотя при отображении массива это правильно, так как в не включает в себя Apri л / данные мая?

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020

Мне удалось решить проблему. Вместо того, чтобы использовать даты в качестве фильтра, я преобразовал даты в миллисекунды и использовал их в качестве фильтра. Это исправило вывод проблемы форматирования, так что критерий был того же формата, что и массив Pulld, и он работал для завершения фильтра таким образом.

Спасибо за помощь!

0 голосов
/ 14 апреля 2020

Как сравнивать даты

Объекты даты нельзя сравнивать напрямую друг с другом.

Вместо этого вы можете использовать функцию getTime () , которая преобразует даты в мс с Unix эпох.

Пример:

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

Обратите внимание, что getTime() будет работать только в том случае, если объекты, к которым он применяется, являются отформатирован таким образом, чтобы правильно распознавались как даты - если он применяется к строке, он выдаст вам ошибку.

...