如何使用Apps脚本获取过滤范围的值

时间:2019-09-22 16:05:29

标签: google-apps-script google-sheets

我需要获取电子表格的范围值-但是只有那些通过当前选择的过滤器显示的行。

我尝试在getValues()上使用sheet.getFilter().getRange()

function applyOverdueFilter() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();

  var filter1 = SpreadsheetApp.newFilterCriteria();
  filter1.whenDateBefore(SpreadsheetApp.RelativeDate.TODAY);

  sheet.getFilter().setColumnFilterCriteria(4, filter1.build());

  var newData = sheet.getFilter().getRange().getValues(); // this doesn't work
  Logger.log(newData);
}

但是,newData包含我的电子表格中的所有数据,而不仅仅是包含应用了过滤器的数据。如何只获取过滤的数据?

注意:工作表已经有一个过滤器,并且直到最后两行都可以正常工作。我不想在JavaScript中使用数组过滤的原因是因为我的过滤器关注日期和相对日期,而使用Apps Script的过滤条件可以轻松地过滤这些日期和相对日期。

1 个答案:

答案 0 :(得分:0)

您可以获取电子表格中的所有数据,然后应用一个过滤器,该过滤器会在该范围内进行迭代以查找您的条件。在这种情况下,电子表格将ss称为变量,然后我声明一个var调用newData,这将是每个item [column] ==条件的结果,其中各列为其列的编号,例如B列为1,A列为0和您应该知道的条件。

例如返回项目[0] =='CLOSED'。

function applyOverdueFilter() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getDataRange().getDisplayValues();
  var newData= ss.filter(function(item){
  return item[column] == criteria;
  });
Logger.log(newData);
}