首页 > 解决方案 > 根据特定列值过滤工作表

问题描述

我正在尝试根据以下 3 列值过滤工作表。我是 Apps 脚本编程的新手,任何建议都将不胜感激。

添加了图像:必须使用变量“jobid”过滤 JobID,并且必须在变量“fromdate”和“todate”之间过滤 BOLDate。因此,结果将只有表中的前 6 行,因为最后一行不在日期范围内。

#3 Filters

var fromdate = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Form').getRange(3,10).getValue();
var todate = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Form').getRange(3,11).getValue();
var jobid = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Form').getRange(25,5).getValue();

#Read the input sheet and apply the following filters on 3 columns - JOBID is filtered with jobid and
BOLDATE is filtered between fromdate and todate.

var Sheet_Input = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Input');
var Sheet_Input_Data = Sheet_Input.getDataRange().getValues();

for (var i = 0; i < Sheet_Input_Data.length; i++) {
  var JobID = Sheet_Input_Data[i][0];
  var BOLDate = Sheet_Input_Data[i][7];
  
  #Trying to do the filter and get resultant rows

}

在此处输入图像描述

标签: google-apps-scriptfilter

解决方案


function findData() {
  const ss=SpreadsheetApp.getActive();
  const sh=ss.getSheetByName('Input');
  const vs=sh.getRange(2,1,sh.getLastRow()-1,sh.getLastColumn()).getValues();
  const fm=ss.getSheetByName('Form');
  const fr=fm.getRange(3,10).getValue()
  const frv=new Date(fr).valueOf();
  const to=fm.getRange(3,11).getValue();
  const tov=new Date(to).valueOf();
  const id=fm.getRange(3,12).getValue();
  let row=[];
  vs.forEach((r,i)=>{
    let dtv=new Date(r[7]).valueOf();
    if(dtv>=frv && dtv<=tov && id==r[0]) {
      row.push(r);
    }
  });
  Logger.log(r);
}

提供我可以复制和粘贴的数据,我会测试它,否则你可以测试它。


推荐阅读