如何在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
相关产品推荐
相关产品推荐

