创建脚本以按工作表中的条件进行过滤

时间:2019-01-03 15:21:33

标签: google-apps-script

我对编码非常陌生,很可能会提供简单脚本的支持。

我想创建一个每天触发的脚本,该脚本按条件在几个不同的列上进行过滤。

我已经在网上搜索过,只能找到有关排序的帮助。在按条件过滤时,我似乎找不到答案。

我想将D列(状态)过滤到任何不具有值'Closed'的单元格,并且还希望过滤T列(范围)以仅具有值'Strategic'

然后按第一列对该范围进行排序。 (我相信我已经取得了以下成就) 然后,我想每天对此进行一次触发,然后再进行设置。

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data Studio")

  var range = ss.getRange(2, 1, sheet.getLastRow()-1, ss.getLastColumn())

range.sort([{column: 1, descending: false}]);}

2 个答案:

答案 0 :(得分:0)

不是那么简单。您需要使用不是最直观的filter和filterBuilder。这是入门的基本代码。根据您的需要进行修改。

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data Studio");

  var range = ss.getRange(2, 1, sheet.getLastRow()-1, ss.getLastColumn());

  // Get the existing filter, else create one for this range. May need to just
  // remove all filters first in case they conflict.
  var filter = range.getFilter() || range.createFilter();

  var column_Status = 4; // column D
  var filterCriteria_Status = SpreadsheetApp.newFilterCriteria()
    .whenTextDoesNotContain('Closed')
    .build();

  var column_Scope = 20; // column T
  var filterCriteria_Scope = SpreadsheetApp.newFilterCriteria()
    .whenTextContains('Strategic')
    .build();

  var column_to_sort = 1;
  filter.setColumnFilterCriteria(column_Status, filterCriteria_Status)
    .setColumnFilterCriteria(column_Scope, filterCriteria_Scope)
    .sort(column_to_sort, true);
}

通过菜单非常简单地设置每日触发器:“编辑”>“当前项目的触发器”。

答案 1 :(得分:0)

以下是对我有用的代码(因为我本人无法使所接受的答案中所示的解决方案正常工作):

function onEdit(e){

  var ss = e.source.getActiveSheet()  
  var ra = e.range
  var erow = e.range.getRow() 
  var ecolumn = e.range.getColumn()

// name of the sheet + coordinates of the searchbox (here is A1)
  
  if (erow == 1 && ecolumn == 1 && ss.getName()=="Sheet1" ){
    var val = ra.getValue()
    var rang = ss.getDataRange();
    var filterCriteria = SpreadsheetApp
    .newFilterCriteria()
    .whenTextContains(val) 
    .build();
    var filter = rang.getFilter() || rang.createFilter();
    filter.setColumnFilterCriteria(3, filterCriteria); // column to search = 3
  }
  
}

干杯, 吉恩