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

如何让Google Script访问私有Google Sheets且不开放编辑权限?

解决Google Sheets脚本仅访问私有文件的权限方案

核心思路是使用Google服务账号(Service Account),让脚本以服务账号身份访问私有Sheet,无需给普通用户开放私有Sheet的权限。具体步骤如下:

1. 创建并配置Google Cloud项目

  • 打开Google Cloud控制台,新建一个项目。
  • 在项目中搜索并启用Google Sheets API。

2. 创建服务账号并生成密钥

  • 进入项目的「IAM与管理」→「服务账号」页面,点击「创建服务账号」。
  • 填写账号名称和描述后,为该账号分配权限:根据需求选择「Editor」(编辑)或「Viewer」(查看)权限(仅赋予私有Sheet所需的最小权限)。
  • 进入服务账号详情页,切换到「密钥」标签,点击「添加密钥」→「创建新密钥」,选择JSON格式并下载密钥文件,妥善保存(不要泄露)。

3. 授权服务账号访问私有Sheet

  • 打开你的私有Google Sheet,点击右上角「共享」按钮。
  • 输入服务账号的邮箱(可从下载的JSON密钥文件的client_email字段获取),赋予对应的访问权限(和步骤2中分配的权限匹配),点击「发送」。

4. 修改公开Sheet的脚本,实现服务账号鉴权

  • 打开公开Sheet的脚本编辑器,先添加OAuth2库:点击「资源」→「库」,输入库ID 1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF,选择最新版本并保存。
  • 为了安全存储密钥,点击「文件」→「项目属性」→「脚本属性」,添加以下属性:
    • PRIVATE_KEY:粘贴JSON密钥文件中private_key字段的内容(注意保留换行和格式)
    • CLIENT_EMAIL:粘贴JSON密钥文件中client_email字段的内容
    • CLIENT_ID:粘贴JSON密钥文件中client_id字段的内容
  • 编写脚本示例(以读取私有Sheet数据为例):
    function getSheetsService() {
      const props = PropertiesService.getScriptProperties();
      return OAuth2.createService('PrivateSheetAccess')
        .setTokenUrl('https://oauth2.googleapis.com/token')
        .setPrivateKey(props.getProperty('PRIVATE_KEY'))
        .setClientEmail(props.getProperty('CLIENT_EMAIL'))
        .setClientId(props.getProperty('CLIENT_ID'))
        .setPropertyStore(PropertiesService.getScriptProperties())
        .setScope('https://www.googleapis.com/auth/spreadsheets');
    }
    
    function fetchPrivateSheetData() {
      const service = getSheetsService();
      if (!service.hasAccess()) {
        throw new Error('鉴权失败:' + service.getLastError());
      }
    
      const privateSheetId = '你的私有Sheet ID';
      const range = 'Sheet1!A1:B10'; // 按需修改范围
      const apiUrl = `https://sheets.googleapis.com/v4/spreadsheets/${privateSheetId}/values/${range}`;
    
      const response = UrlFetchApp.fetch(apiUrl, {
        headers: { Authorization: `Bearer ${service.getAccessToken()}` }
      });
    
      const data = JSON.parse(response.getContentText());
      // 这里可以处理拉取到的数据,比如写入公开Sheet
      SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1').getRange('A1').setValue(data.values[0][0]);
    }
    
  • 首次运行脚本时,会提示授权,按照指引完成权限确认即可。

注意事项

  • 密钥文件和脚本属性中的敏感信息必须严格保密,禁止泄露给无关人员。
  • 遵循最小权限原则:服务账号仅获得私有Sheet所需的最低权限(如仅需读取则设为查看权限)。
  • 若需要推送数据到私有Sheet,只需修改API请求为POST/PUT方法,参考Google Sheets API文档调整请求体即可。

内容的提问来源于stack exchange,提问作者nord_poster

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 10:50:20