как отфильтровать по дате с помощью Google скрипта?

#javascript #google-apps-script #spreadsheet

Вопрос:

Мне нужно отфильтровать электронную таблицу на основе сегодняшней даты. это код, который я использовал:

 function myFunction() {
  var SS = SpreadsheetApp.openById("19nlPw9jF8FCFwY-qYwdBILoGDazrH12c8BgYfhwWSKA");
  var Sheet = SS.getSheetByName("All Joiners");
  var Jun = SS.getSheetByName("01 Jun");
  var data = Sheet.getRange(2, 1,Sheet.getLastRow(),Sheet.getLastColumn()).getValues();

  var criteria = SpreadsheetApp.FilterCriteriaBuilder.whenDateEqualTo(new Date(Jun.getRange("A1")))
  .build();
  spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(4, criteria);

}
 

Комментарии:

1. new Date() Работает ли это на вас?

2. Можете ли вы уточнить, какое значение имеет ячейка A1 ? Кроме того, вы хотите, чтобы дата была точно такой же или просто в один и тот же день?

3. Значением в ячейке A1 может быть любая дата. чаще всего сегодняшняя дата используется для фильтрации данных за сегодняшний день.

4. никакая новая дата (), похоже, не работает.

Ответ №1:

Несколько вещей —

  • Ваш код извлекает диапазон ячейки A1 в июне — вам также нужно получить значение.
  • FilterCriteriaBuilder не является функцией и должен быть newFilterCriteria().
  • электронная таблица.getActiveSheet() должна быть SS.getActiveSheet, так как вы объявили ее как SS

Исходный Код:

 var criteria = SpreadsheetApp.FilterCriteriaBuilder.whenDateEqualTo(new Date(Jun.getRange("A1"))).build(); 
spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(4, criteria); 
 

Должно быть:

 let criteria = SpreadsheetApp.newFilterCriteria().whenDateEqualTo(new Date(Jun.getRange("A1").getValue())).build();    
SS.getActiveSheet().getFilter().setColumnFilterCriteria(4, criteria);
 

Кроме того, примечание — вы объявили лист, но не использовали его. Если вы намеревались обновить фильтр столбцов на этом конкретном листе, а не на текущем активном листе, то вместо SS.getActiveSheet () он должен быть:

 Sheet.getFilter().setColumnFilterCriteria(4, criteria);
 

Если на вашем листе в настоящее время нет фильтра, вам необходимо его создать. Для этого извлеките Range фильтр, к которому вы хотите применить фильтр, а затем вызовите Range.createFilter(). Так что эта линия будет чем-то вроде ( Range быть вашим желаемым диапазоном):

 Range.createFilter().setColumnFilterCriteria(4, criteria);
 

Кроме того, если ваша A1 ячейка является датой (а не строкой, отформатированной как Дата), нет необходимости использовать new Date() ее при настройке критериев:

 const criteria = SpreadsheetApp.newFilterCriteria().whenDateEqualTo(Jun.getRange("A1").getValue()).build();
 

Комментарии:

1. Привет, спасибо за ваше предложение, попробовав это, я получаю сообщение об ошибке следующего содержания: «Ошибка типа: Не удается прочитать свойство ‘setColumnFilterCriteria’ нулевой функции»

2. @AbhijithP Это означает, что в настоящее время в вашем листе нет фильтра. Чтобы создать его, извлеките Range фильтр, к которому вы хотите применить фильтр, а затем вызовите Range.createFilter() . Так что полная строка будет Range.createFilter().setColumnFilterCriteria(4, criteria); . Кроме того, если ваша A1 ячейка является Date (а не строкой, отформатированной как дата), нет необходимости использовать new Date() при настройке критериев: whenDateEqualTo(Jun.getRange("A1").getValue()) .