如何根据谷歌应用程序脚本GAS中另一张表中列出的单元格值筛选出一张表上的行



我原来的帖子有@The Master的回复,但我需要更多的细节,所以我正在编辑它。我希望@The Master或其他人能帮忙。

在谷歌应用程序脚本中,我有一个脚本来筛选具有特定交易用户(如DEOK645、JETH850、JOON409等(且分配数量大于0的行。请参阅下面的脚本。我的问题是,与其在脚本中列出DEOK645、JETH850等的值,有没有一种方法可以根据另一张表中的列表指定这些值?例如,我将在名为"人员"的工作表中的单独行中列出这些用户,因此,我可以转到工作表"人员"并在工作表中添加或删除值,而不是每次需要添加或更改时都更新代码。我的目标是同时拥有已筛选的数据集("filteredValue"(和排除已筛选数据集(noFilteredValue(的数据集。如果我能得到一些建议,我将不胜感激!感谢您的时间!

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('V1');
var firstRow = sheet.getRange(1,1,1,sheet.getLastColumn()).getValues();
var C1 = firstRow[0].indexOf('TxnUser');
var C2 = firstRow[0].indexOf('DispensedQuantity');
var rangeVals = 
sheet.getRange(1,1,sheet.getLastRow(),sheet.getLastColumn()).getValues();

var filteredRange = rangeVals.reduce(function(obj, val){
if ((val[C1] === "DEOK645"|| val[C1] === "JETH850" || val[C1] === "JOON409"|| val[C1] === "THAM1452") && val[C2] > 0) {
obj.filteredValue.push(val);
} else { obj.noFilteredValue.push(val);}
return obj;
}, {filteredValue: [], noFilteredValue: []});
// The above code works
//I tried to adapt the solution from @The Master but it says "Set" is not defined but maybe that is simply due to my lack of proficiency. Here is what I have tried:

var Personnel = ss.getSheetByName('Personnel');
var PersonnelSet = new Set(Personnel.getDataRange().getValues().flat());
var filteredRange = rangeVals.reduce(function(obj,val){
if (!PersonnelSet.has(val)) {obj.filteredValue.push(val);
} else {obj.noFilteredValue.push(val);}
return obj;
}, {filteredValue: [], noFilteredValue: []});

使用集:

const rangeVals = sheet.getRange(1,1,sheet.getLastRow()-1,sheet.getLastColumn()).getValues();
const excludeSheet = ss.getSheetByName('Personnel');
const excludeSet = new Set(excludeSheet.getDataRange().getValues().flat());
const filteredRange = rangeVals.filter(function(row){
return !excludeSet.has(row[C1])  && row[C2]>0
});

相关内容

最新更新