如何在Apps Script数组中筛选出含特定用户ID的行?
解决方案
场景1:筛选所有包含8位用户ID的行
如果你的需求是提取所有User列值为8位数字的行,可以修改代码如下:
function doGet(req) { var doc = SpreadsheetApp.getActiveSpreadsheet(); var sheet = doc.getSheetByName('Sheet1'); var values = sheet.getDataRange().getValues(); var output = []; // 正则匹配8位数字ID,若ID含字母可改为/^[A-Za-z0-9]{8}$/ const validUserIdPattern = /^\d{8}$/; for(var i = 1; i < values.length; i++) { const currentUserId = values[i][0]; // 仅保留符合8位ID规则的行 if(validUserIdPattern.test(currentUserId)) { var row = {}; row['User'] = currentUserId; row['Name'] = values[i][1]; row['Email'] = values[i][2]; row['Phone'] = values[i][3]; row['Notes'] = values[i][4]; output.push(row); } } return ContentService.createTextOutput(JSON.stringify({data: output})).setMimeType(ContentService.MimeType.JSON); }
核心改动:
- 新增正则表达式校验,精准匹配8位格式的用户ID
- 循环内增加判断逻辑,仅将符合规则的行加入输出数组
场景2:根据指定的8位ID过滤行
如果你的需求是仅返回与某个特定8位ID匹配的行(比如通过URL参数传递ID),可以使用以下代码:
function doGet(req) { var doc = SpreadsheetApp.getActiveSpreadsheet(); var sheet = doc.getSheetByName('Sheet1'); var values = sheet.getDataRange().getValues(); // 从URL参数中获取目标ID(示例:你的脚本地址?id=12345678) const targetUserId = req.parameter.id; // 先校验参数有效性 if(!targetUserId || !/^\d{8}$/.test(targetUserId)) { return ContentService.createTextOutput(JSON.stringify({error: "请传入有效的8位用户ID参数"})).setMimeType(ContentService.MimeType.JSON); } var output = []; for(var i = 1; i < values.length; i++) { const currentUserId = values[i][0]; // 匹配目标ID if(currentUserId == targetUserId) { var row = {}; row['User'] = currentUserId; row['Name'] = values[i][1]; row['Email'] = values[i][2]; row['Phone'] = values[i][3]; row['Notes'] = values[i][4]; output.push(row); } } return ContentService.createTextOutput(JSON.stringify({data: output})).setMimeType(ContentService.MimeType.JSON); }
核心改动:
- 通过
req.parameter.id获取URL查询参数中的目标ID - 新增参数校验,避免无效请求
- 仅保留与目标ID完全匹配的行
内容的提问来源于stack exchange,提问作者So lost rn
相关产品推荐
相关产品推荐

