В моем исходном сообщении есть ответ от @The Master, но мне нужно было немного больше деталей, поэтому я редактирую его. Я надеюсь, что @ Master или кто-то может помочь.
В скриптах приложения Google у меня есть скрипт для фильтрации строк, в которых есть определенные пользователи транзакции (такие как DEOK645, JETH850, JOON409 и др. c .. .) и это количество дозировки больше 0. Пожалуйста, смотрите скрипт ниже. У меня вопрос, вместо того, чтобы перечислять значения DEOK645, JETH850 и т. Д. c ... в самом скрипте, есть ли способ указать эти значения на основе списка на другом листе? Например, я буду перечислять этих пользователей в отдельных строках в листе вызова «Персонал», поэтому вместо обновления кода каждый раз, когда мне нужно будет добавить или изменить, я могу просто go добавить лист «Персонал» и добавить или удалить значения в листе. Моя цель - иметь как отфильтрованный набор данных ("FilterValue), так и исключающий отфильтрованный набор данных (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: []});