Google apps script 在谷歌表中,我想用Apple脚本过滤掉过去的日期,但不过滤掉空白的单元格。

Google apps script 在谷歌表中,我想用Apple脚本过滤掉过去的日期,但不过滤掉空白的单元格。,google-apps-script,filter,range,Google Apps Script,Filter,Range,在GoogleApps脚本中,我想过滤掉其中一列中所有带有过去日期的行。 我设法做到了这一点,但是这个过滤器也会过滤掉日期列中有空白的行。我想让这一排继续下去。 所以我想:如果我创建了一个没有行、没有日期的范围,然后过滤新的范围会怎么样。 这是可能的还是我应该使用另一种方法 这是我的代码: function hidePastDates() { var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var sheet = spr

在GoogleApps脚本中,我想过滤掉其中一列中所有带有过去日期的行。 我设法做到了这一点,但是这个过滤器也会过滤掉日期列中有空白的行。我想让这一排继续下去。 所以我想:如果我创建了一个没有行、没有日期的范围,然后过滤新的范围会怎么样。 这是可能的还是我应该使用另一种方法

这是我的代码:

function hidePastDates() {

  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getActiveSheet();
  var range = sheet.getDataRange();
  var today = new Date();
  var weekPast = new Date(today.getTime() - 1000*60*60*24*7) 
  var oldFilter = range.getFilter();

  if (oldFilter !== null) {  
    oldFilter.remove();
  }
  var filter = range.createFilter();  

  var filterCriteria = SpreadsheetApp.newFilterCriteria();

  filterCriteria.whenDateAfter(weekPast);
  filter.setColumnFilterCriteria(2,filterCriteria);
}  


试试这样的方法:

function reviewCurrentDatesOnly() {
  const ss=SpreadsheetApp.getActive();
  const sh=ss.getSheetByName('sheet name');
  const [hA, ...data]=sh.getDataRange().getValues();//assume a single header with  data below
  let idx={};
  hA.forEach((h,i)=>{idx[h]=i});//return index for a given column header striing
  const today=new Date(new Date().getFullYear(),new Date().getMonth(),new Date().getDate()).valueOf();//valueof today
  const tommorow=new Date(new Date().getFullYear(),new Date().getMonth(),new Date().getDate()+1).valueOf();value of tomorrow
  data.forEach((r,i)=>{
    let dt=r[idx['date-column header']];
    let dtv=new Date(dt).valueOf();
    //requires all data values to be between today and tomorrow
    if(dtv>today && dtv<tommorow) {
      //put your code here
    }
  });
}
函数reviewCurrentDatesOnly(){
const ss=SpreadsheetApp.getActive();
const sh=ss.getSheetByName('sheet name');
const[hA,…data]=sh.getDataRange().getValues();//假设一个标头包含以下数据
设idx={};
hA.forEach((h,i)=>{idx[h]=i});//返回给定列标题行的索引
const today=new Date(new Date().getFullYear(),new Date().getMonth(),new Date().getDate()).valueOf();//valueOf today
const tommorow=new Date(new Date().getFullYear(),new Date().getMonth(),new Date().getDate()+1).valueOf();value of明天
data.forEach((r,i)=>{
设dt=r[idx['date-column header']];
设dtv=新日期(dt).valueOf();
//要求所有数据值介于今天和明天之间

如果(dtv>today&&dtv无法按照您描述的方式进行筛选。即使在工作表中手动应用筛选,也会得到相同的结果。或者,您可以隐藏行:

function hidePastDates() {

  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getActiveSheet();
  var range = sheet.getDataRange();
  var rangeValues = range.getValues();
  var today = new Date();
  var weekPast = new Date(today.getTime() - 1000*60*60*24*7) 

  for (var i = 1; i < range.getHeight(); i++){
    if (rangeValues[i][1] != ""){
      if (rangeValues[i][1] < weekPast){
        sheet.hideRows(i+1);
        }
      }
    }
  } 
函数hidePastDates(){
var电子表格=SpreadsheetApp.getActiveSpreadsheet();
var sheet=spreadsheet.getActiveSheet();
var range=sheet.getDataRange();
var rangeValues=range.getValues();
var today=新日期();
var weekPast=新日期(today.getTime()-1000*60*60*24*7)
对于(var i=1;i
欢迎!您可以编辑您的帖子,添加您迄今为止所写的代码吗?这样我们可以看到您的尝试,人们可以提出建议或提供更正。我添加了我的代码。感谢您的建议,但我对应用程序脚本非常陌生,所以我不完全理解。我在问题中添加了我的代码,还有两个simplif的屏幕截图ied版本的我的工作表。这是我试图避免的选项。:-)但如果不可能,我会选择这个。非常感谢!