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

使用JavaScript向Google Sheets插入行时遭遇401认证错误求助

解决Google Sheets API插入行的401认证问题

问题根源

你用API Key调用Append接口时出现401错误,核心原因是写操作(插入行)需要用户身份认证——API Key仅支持公开资源的只读请求,无法用于修改数据的操作,必须使用OAuth2访问令牌或服务账号凭证。

方案1:使用服务账号(适合后端/自动化脚本)

  • 步骤1:在Google Cloud控制台创建服务账号,下载对应的JSON密钥文件
  • 步骤2:将服务账号的邮箱地址添加到你的表格共享列表中,权限设置为「编辑」
  • 步骤3:通过密钥生成认证令牌,调用接口时在请求头中携带Authorization: Bearer {生成的令牌}
  • Postman请求示例:
    • URL:https://sheets.googleapis.com/v4/spreadsheets/1KjrAqsNzzNIyEDb4hjx846j2AVffSeLUqi0BMR_pKPM/values/Sheet1:append?valueInputOption=USER_ENTERED
    • 请求方法:POST
    • 请求头:Content-Type: application/json、Authorization: Bearer {你的令牌}
    • 请求体(需严格对应表格列顺序:asin、title、bsr、price、image_url):
      {
        "values": [
          ["aaaa", "ratings", "555523", "15.99", "hhhhhhh"]
        ]
      }
      

方案2:使用OAuth2授权(适合浏览器端JavaScript)

  • 步骤1:在Google Cloud控制台创建OAuth客户端ID(应用类型选择「Web应用」),添加允许的JavaScript来源域名
  • 步骤2:通过Google OAuth2库引导用户完成授权,获取访问令牌
  • 步骤3:调用Append接口时在请求头中携带Authorization: Bearer {访问令牌}
  • 浏览器端代码示例:
    // 加载Google OAuth2库
    function loadAuthLibrary() {
      const script = document.createElement('script');
      script.src = 'https://apis.google.com/js/api.js';
      script.onload = initClient;
      document.body.appendChild(script);
    }
    
    function initClient() {
      gapi.load('client:auth2', () => {
        gapi.client.init({
          clientId: '你的OAuth客户端ID',
          scope: 'https://www.googleapis.com/auth/spreadsheets'
        }).then(() => {
          // 未授权则引导用户登录授权
          if (!gapi.auth2.getAuthInstance().isSignedIn.get()) {
            gapi.auth2.getAuthInstance().signIn();
          } else {
            appendRowToSheet();
          }
        });
      });
    }
    
    function appendRowToSheet() {
      const accessToken = gapi.auth.getToken().access_token;
      fetch('https://sheets.googleapis.com/v4/spreadsheets/1KjrAqsNzzNIyEDb4hjx846j2AVffSeLUqi0BMR_pKPM/values/Sheet1:append?valueInputOption=USER_ENTERED', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
          'Authorization': `Bearer ${accessToken}`
        },
        body: JSON.stringify({
          "values": [["aaaa", "ratings", "555523", "15.99", "hhhhhhh"]]
        })
      })
      .then(response => response.json())
      .then(data => console.log('插入成功:', data))
      .catch(error => console.error('错误:', error));
    }
    
    // 初始化执行
    loadAuthLibrary();
    

关键注意事项

  • 请求体必须采用values数组格式,且元素顺序要和表格列(asin、title、bsr、price、image_url)完全匹配
  • 接口URL必须携带valueInputOption=USER_ENTERED参数,确保数据按用户输入格式解析
  • 无论使用哪种方案,都要确保你的Google Cloud项目已启用Google Sheets API

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 22:06:27