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

如何在Google Apps Script中使用spreadsheets.readonly只读权限

解决方案:在Google Apps Script中实现只读访问Google表格

你提到的问题确实存在——原生SpreadsheetApp.openById()/openByURL()方法强制要求全读写权限,但其实有两种更简易的方式实现只读访问,不用复杂的API密钥管理:

1. 使用Apps Script内置的Sheets API高级服务

这是最推荐的方案,操作比手动配置云项目简单得多:

  • 在Apps Script编辑器中,点击左侧菜单栏的「服务」→ 点击「添加服务」→ 找到「Sheets API」并启用
  • 打开项目的appsscript.json清单文件,把权限范围修改为:
    "oauthScopes": [
      "https://www.googleapis.com/auth/spreadsheets.readonly"
    ]
    
  • 之后就可以用Sheets API的只读方法获取数据,比如读取指定表格的某个范围:
    function getSheetData() {
      const spreadsheetId = "你的表格ID";
      const range = "Sheet1!A1:C10";
      const response = Sheets.Spreadsheets.Values.get(spreadsheetId, range);
      const values = response.values || [];
      return values;
    }
    

这种方式完全在Apps Script生态内完成,不需要额外配置API密钥,权限严格限制为只读。

2. 公开表格的无授权CSV拉取(仅适用于可公开查看的表格)

如果你的表格设置了「任何人可查看」权限,甚至不需要OAuth,直接用UrlFetchApp拉取CSV格式的内容:

function fetchPublicSheetData() {
  const spreadsheetId = "你的表格ID";
  const sheetName = "Sheet1";
  const url = `https://docs.google.com/spreadsheets/d/${spreadsheetId}/gviz/tq?tqx=out:csv&sheet=${encodeURIComponent(sheetName)}`;
  const response = UrlFetchApp.fetch(url);
  const csvContent = response.getContentText();
  // 解析CSV为数组
  const rows = csvContent.split("\n").map(row => row.split(","));
  return rows;
}

这种方式连OAuth权限都不需要,但仅适用于公开或共享给特定用户可查看的表格。

关于原生SpreadsheetApp的说明

原生SpreadsheetApp服务确实没有提供只读权限的接口,它的设计定位是全功能的表格操作,所以必须要求全读写权限。如果需要严格的只读权限,优先用上面的两种方案,尤其是第一种Sheets API高级服务,既满足权限要求,又不需要迁移到独立云项目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:55:20