Google Sheets Apps Script需求:匹配用户邮箱后过滤Leads表行
解决方案:基于用户邮箱自动过滤Google Sheets数据
以下是实现需求的完整Apps Script代码,你可以直接复制到Google Sheets的脚本编辑器中使用:
function filterLeadsByCurrentUser() { // 获取当前Spreadsheet实例 const ss = SpreadsheetApp.getActiveSpreadsheet(); // 获取两个目标工作表 const userSheet = ss.getSheetByName('User'); const leadsSheet = ss.getSheetByName('Leads'); if (!userSheet || !leadsSheet) { SpreadsheetApp.getUi().alert('未找到指定工作表,请检查标签名是否正确'); return; } // 获取当前操作用户的邮箱 const currentUserEmail = Session.getActiveUser().getEmail(); // 读取User表的所有数据(默认邮箱在A列、姓名在B列,可根据实际结构调整索引) const userData = userSheet.getDataRange().getValues(); // 匹配当前用户对应的姓名 let userName = null; for (const row of userData) { if (row[0] === currentUserEmail) { userName = row[1]; break; } } if (!userName) { SpreadsheetApp.getUi().alert('未在User表中找到当前用户的信息'); return; } // 先清除之前的筛选状态,显示所有行 leadsSheet.showRows(1, leadsSheet.getMaxRows()); // 遍历Leads表,过滤出O列(第15列,数组索引为14)匹配姓名的行 const leadsData = leadsSheet.getDataRange().getValues(); for (let i = 1; i < leadsData.length; i++) { // 跳过表头行(假设第1行是表头) const rowName = leadsData[i][14]; if (rowName !== userName) { leadsSheet.hideRows(i + 1); // 表格行号从1开始,所以索引i对应行号i+1 } } }
关键逻辑说明
- 用户身份获取:
Session.getActiveUser().getEmail()用于获取当前操作用户的邮箱,首次运行脚本需要授权获取用户身份权限。 - 用户信息匹配:遍历User表数据找到对应邮箱的姓名,若你的表格中邮箱/姓名列位置不同,只需调整
row[0](邮箱列索引)和row[1](姓名列索引)即可。 - 行过滤操作:先重置所有行的显示状态,再逐个检查Leads表O列的姓名,不匹配则隐藏该行,确保用户只能看到自己负责的数据。
- 异常处理:加入了工作表不存在、用户未找到的弹窗提示,避免脚本无意义报错。
额外优化建议
- 若需要打开表格自动执行过滤,添加以下代码即可:
function onOpen() { filterLeadsByCurrentUser(); }
- 也可以给表格添加自定义菜单,方便手动触发:
function onOpen() { const ui = SpreadsheetApp.getUi(); ui.createMenu('数据过滤') .addItem('筛选我的Leads', 'filterLeadsByCurrentUser') .addToUi(); }
内容的提问来源于stack exchange,提问作者Mo396
相关产品推荐
相关产品推荐

