AppSheet技术需求:配置过滤仅展示含当前用户姓名的数据行
问题描述
我有一个Users工作表,当前登录流程运行正常(当用户邮箱存在于Users列表中时,数据可正常显示)。
(Users工作表截图:
)
现需实现数据过滤功能,仅向当前登录用户展示包含其姓名的行数据,请问应在何处进行配置?对应的代码是什么?
解决方案
配置位置
过滤逻辑需要嵌入到数据查询/获取的核心环节,具体分两种场景:
- 若使用Google Apps Script绑定工作表开发应用:在登录成功后查询数据的函数中添加过滤条件
- 若通过前端(如Web App)展示数据:可在后端脚本中直接获取登录用户信息并过滤,或前端携带用户信息请求过滤后的数据
代码示例(以Google Apps Script + Google Sheets场景为例)
假设Users表A列存邮箱、B列存姓名,业务数据在DataSheet中,C列为关联的用户姓名:
1. 获取当前登录用户的姓名
function getCurrentUserName() { const userEmail = Session.getActiveUser().getEmail(); const usersSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Users"); const usersData = usersSheet.getDataRange().getValues(); // 遍历Users表匹配邮箱,返回对应姓名 for (let i = 1; i < usersData.length; i++) { if (usersData[i][0] === userEmail) { return usersData[i][1]; } } return null; }
2. 过滤业务数据
function getFilteredData() { const currentUserName = getCurrentUserName(); if (!currentUserName) return []; const dataSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("DataSheet"); const allData = dataSheet.getDataRange().getValues(); // 仅保留姓名匹配当前用户的行(这里假设C列是姓名列,索引为2) const filteredData = allData.filter(row => row[2] === currentUserName); return filteredData; }
工作表函数实现(无需脚本)
如果直接在工作表中展示过滤后的数据,可在目标单元格输入QUERY函数:
=QUERY(DataSheet!A:C, "SELECT * WHERE C = '" & VLOOKUP(USEREMAIL(), Users!A:B, 2, FALSE) & "'", 1)
内容的提问来源于stack exchange,提问作者Mo396
相关产品推荐
相关产品推荐

