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

Google表格脚本读取云端JSON文件遇权限错误,已配置OAuth仍报错

问题分析与解决方案

核心错误点

  • 操作对象混淆:你要读取的是Google云端硬盘中的普通JSON文件,但代码里用了DocumentApp.openById(),这个方法是用来打开Google Docs格式文档的,完全不适用于普通JSON文件。
  • 权限不匹配:你配置的是Google Docs的权限,但操作的是Drive中的文件,需要的是Drive相关权限。
  • 函数调用方式错误:在表格单元格直接调用自定义函数(如=jsonTest())时,这类函数运行在受限环境,无法访问需要OAuth授权的服务(比如DriveApp/DocumentApp)。

修正步骤

1. 更新权限配置

修改manifest文件的oauthScopes,添加Drive只读权限(如果需要写入可换成更宽的权限):

{
  "timeZone": "Europe/Paris",
  "dependencies": {
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8",
  "oauthScopes": [
    "https://www.googleapis.com/auth/drive.readonly",
    "https://www.googleapis.com/auth/spreadsheets"
  ]
}

2. 编写正确的读取函数

替换原函数为以下代码,通过DriveApp读取云端硬盘的JSON文件,并添加菜单触发方式(避免单元格调用的权限限制):

// 打开表格时添加自定义菜单
function onOpen() {
  const ui = SpreadsheetApp.getUi();
  ui.createMenu('自定义工具')
    .addItem('读取JSON文件', 'readJsonFromDrive')
    .addToUi();
}

// 读取Drive中的JSON文件
function readJsonFromDrive() {
  // 替换为你的JSON文件ID
  const jsonFileId = '替换成你的JSON文件ID';
  
  try {
    // 获取文件并读取内容
    const file = DriveApp.getFileById(jsonFileId);
    const jsonContent = file.getBlob().getDataAsString();
    
    // 解析JSON(按需处理,这里示例将解析后的数据写入A1单元格)
    const parsedData = JSON.parse(jsonContent);
    const activeSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    activeSheet.getRange('A1').setValue(JSON.stringify(parsedData));
    
    // 可选:弹出提示告知成功
    SpreadsheetApp.getUi().alert('JSON文件读取成功,内容已写入A1单元格');
  } catch (error) {
    SpreadsheetApp.getUi().alert('读取失败:' + error.message);
  }
}

3. 触发函数的方式

保存代码后刷新表格,会看到顶部出现「自定义工具」菜单,点击「读取JSON文件」,按照提示完成授权即可执行。

关键说明

  • 不要在单元格直接调用需要授权的自定义函数,这类函数必须通过菜单、按钮或定时触发器来触发。
  • 确保你使用的文件ID是云端硬盘中JSON文件的ID(可从文件的URL中获取,URL中d/和/edit之间的字符串就是ID)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 03:28:28