You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AppSheet技术需求:配置过滤仅展示含当前用户姓名的数据行

问题描述

我有一个Users工作表,当前登录流程运行正常(当用户邮箱存在于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 06:11:15