根据多个条件过滤列并复制到不同的 sheet

Filter column on multiple criteria and copy to different sheet

我想将过滤后的数据从一个 sheet 移动到另一个 sheet。

我可以对单个过滤值执行此操作 ex: Money 但我想过滤数组 ex 中的多个值 ex: ["Money", "Society", "Impacts"]

我不知道如何遍历 filterValues 数组并收集来自不同 filterValues 的所有值。

我只是得到过滤后的 rawData 值作为 filterValues 中的最后一个值

我可以用不同的方式做到这一点,但我正在努力更好地理解过滤

function myFunction() {
  var filterValues = ["Money", "Society"]; //filter values.
  var col = 5; // column "E".
  var sheetName = "Elements";

  var ss      = SpreadsheetApp.getActiveSpreadsheet();
  var sht     = ss.getSheetByName(sheetName);
  var rng     = sht.getDataRange();
  var rawData = rng.getDisplayValues();
  
  var out = rawData.filter(dataFilter);
  
  function dataFilter(arr) {
      return arr[col-1]== filterValues;
  }

  const osh=SpreadsheetApp.getActive().getSheetByName("A"); 
  osh.clear();
  osh.getRange(1,1,out.length,out[0].length).setValues(out);
};

试过这个

for (var i = 0; i <= filterValues.length-1; i++) {
  var out = rawData.filter(dataFilter);
  
  function dataFilter(arr) {
      return arr[col-1]== filterValues[i];
    }
   }

您可以像在 SumProduct 中那样使用结合数组语法的基本过滤器函数。示例:=filter(List!A:A,(List!A:A="Society")+(List!A:A="Money")).

我认为您不需要使用 Google 应用脚本。 See this spreadsheet

您可以使用array.includes()检查当前行列e值是否在您的filterValues中列出用于您的数组过滤功能。

示例代码:

function myFunction() {
  var filterValues = ["Money", "Society"]; //filter values.
  var col = 5; // column "E".
  var sheetName = "Elements";

  var ss      = SpreadsheetApp.getActiveSpreadsheet();
  var sht     = ss.getSheetByName(sheetName);
  var rng     = sht.getDataRange();
  var rawData = rng.getDisplayValues();

  var out = rawData.filter(dataFilter);
  
  function dataFilter(arr) {
    return filterValues.includes(arr[col-1]);
  }
  Logger.log(out);
  const osh=SpreadsheetApp.getActive().getSheetByName("A"); 
  osh.clear();
  osh.getRange(1,1,out.length,out[0].length).setValues(out);
};

它有什么作用?

  1. 获取数据范围值
  2. 如果在 filterValues 数组中找到 E 列值,则过滤二维数组值。
  3. 将过滤后的数组写入目标 sheet。

输出:

来源Sheet:元素

目的地Sheet:A