如何过滤从电子表格获取的数据?实现指定状态行排除
问题
我通过代码从电子表格中按Name获取数据,当前输出表格如下:
| No. | Name | XXX | Location | Status | Date | Days |
|---|---|---|---|---|---|---|
| 1. | AAAAAAAAAAAAAA | XXX | XXXXXXXXXXXX | AAA | 7-Sep-22 | 163 Days |
| 2. | AAAAAAAAAAAAAA | XXX | XXXXXXXXXXXX | BBB | 4-Mar-22 | 135 Days |
| 3. | AAAAAAAAAAAAAA | XXX | XXXXXXXXXXXX | CCC | 6-Jun-22 | 34 Days |
| 4. | AAAAAAAAAAAAAA | XXX | XXXXXXXXXXXX | DDD | 6-Oct-22 | 5 Days |
| 5. | AAAAAAAAAAAAAA | XXX | XXXXXXXXXXXX | EEE | 23-Dec-22 | 145 Days |
| 6. | AAAAAAAAAAAAAA | XXX | XXXXXXXXXXXX | FFF | 12-Jan-22 | 6 Days |
需要过滤掉Status为「AAA」「CCC」「FFF」的行,期望输出表格:
| No. | Name | XXX | Location | Status | Date | Days |
|---|---|---|---|---|---|---|
| 1. | AAAAAAAAAAAAAA | XXX | XXXXXXXXXXXX | BBB | 4-Mar-22 | 135 Days |
| 2. | AAAAAAAAAAAAAA | XXX | XXXXXXXXXXXX | DDD | 6-Oct-22 | 5 Days |
| 3. | AAAAAAAAAAAAAA | XXX | XXXXXXXXXXXX | EEE | 23-Dec-22 | 145 Days |
现有代码如下:
function GetAllProject() { var rangeName = '//'; var rows = Sheets.Spreadsheets.Values.get(SheetData, rangeName).values; return rows; } const WaspangList = [//,//,//] function SearchProjectbyWaspang(Name) { if (WaspangList.indexOf(Name.toUpperCase()) == -1) return "The name is not registered!" var project = GetAllProject(); var no = 1; var num = 1; const data = []; var table = '<b>No. | Name| XXX | Location | Status | Date | Days</b>\n'; for (var row = 0; row < project.length; row++) { if (project[row][7] == Name.toUpperCase()) { var resi = num++ + ". | " + project[row][3] + " | " + project[row][5] + " | " + project[row][6] + " | " + project[row][10] + " | " + project[row][12] + " | " + project[row][80] + " Days" + '\n\n'; data.push(resi); } } var join= table + data; var clearComa = join.toString(); var dataNew = clearComa.replaceAll(",", "") return dataNew; } function RunSearchProjectbyWaspang() { WaspangList.forEach(Name => { let getData = SearchProjectbyWaspang(Name) let send = sendText(-xxxxxxxxxxx, getData) Logger.log("Successfully sent data : " + Name) }) }
请问如何实现该过滤功能?
解决方案
只需在循环的判断条件中添加状态过滤逻辑即可,具体修改如下:
修改后的SearchProjectbyWaspang函数代码:
function SearchProjectbyWaspang(Name) { if (WaspangList.indexOf(Name.toUpperCase()) == -1) return "The name is not registered!" var project = GetAllProject(); var num = 1; const data = []; // 定义需要排除的Status列表,后续可直接修改此数组调整过滤规则 const excludedStatus = ["AAA", "CCC", "FFF"]; var table = '<b>No. | Name| XXX | Location | Status | Date | Days</b>\n'; for (var row = 0; row < project.length; row++) { // 同时判断:Name匹配,且当前行Status不在排除列表中 if (project[row][7] == Name.toUpperCase() && !excludedStatus.includes(project[row][10])) { var resi = num++ + ". | " + project[row][3] + " | " + project[row][5] + " | " + project[row][6] + " | " + project[row][10] + " | " + project[row][12] + " | " + project[row][80] + " Days" + '\n\n'; data.push(resi); } } var join= table + data; var clearComa = join.toString(); var dataNew = clearComa.replaceAll(",", "") return dataNew; }
关键改动说明
- 新增
excludedStatus数组,集中存储需要过滤的Status值,后续调整过滤规则只需修改这个数组; - 在
if判断中加入!excludedStatus.includes(project[row][10]),其中project[row][10]对应Status列的索引(从现有代码逻辑看,Status是第11列,索引为10),!includes表示只有当前行的Status不在排除列表中,才会被加入输出内容。
修改后,输出结果会自动过滤掉Status为AAA、CCC、FFF的行,符合需求。
内容的提问来源于stack exchange,提问作者Angely Fransiska
相关产品推荐
相关产品推荐

