#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())
.