根据多个条件过滤列并复制到不同的 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);
};
它有什么作用?
- 获取数据范围值
- 如果在
filterValues
数组中找到 E 列值,则过滤二维数组值。
- 将过滤后的数组写入目标 sheet。
输出:
来源Sheet:元素
目的地Sheet:A
我想将过滤后的数据从一个 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);
};
它有什么作用?
- 获取数据范围值
- 如果在
filterValues
数组中找到 E 列值,则过滤二维数组值。 - 将过滤后的数组写入目标 sheet。
输出:
来源Sheet:元素
目的地Sheet:A