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

使用Axios调用Google Sheets spreadsheets.values.update接口无生效问题

问题:Axios调用Google Sheets API更新表格无反应,返回undefined

我正在开发公司内部React Native应用,用Axios调用Google API更新Google Sheets,已通过Firebase完成Google OAuth认证且状态正常,但更新请求执行无报错,返回undefined,表格也没变化。

相关代码

基础版本:

const doWriteToGoogleSheets = async (sheetId, sheetName, range, majorDimension) => {
    await axios.put(`https://sheets.google.com/v4/spreadsheets/${sheetId}/values/${sheetName}!${range}?valueInputOption=${VALUE_INPUT_OPTION.USER_ENTERED}&key=${AUTH_SHEETS_API_KEY}`, {
        range: `${sheetName}!${range}`,
        majorDimension: "ROWS",
        values: [
            ["NAMESS"] // 测试值,仅更新单个单元格
        ],
    })
}

测试的两种写法:
写法1:

await axios.put(`https://sheets.google.com/v4/spreadsheets/${sheetId}/values/'TimeFullYear (Input Here)'!A1?valueInputOption=${VALUE_INPUT_OPTION.USER_ENTERED}&key=${AUTH_SHEETS_API_KEY}`, {
    "range": "'TimeFullYear (Input Here)'!A1",
    "majorDimension": "ROWS",
    "values": [
        [
            "NAMESS"
        ]
    ]
})

写法2:

await axios.put(`https://sheets.google.com/v4/spreadsheets/${sheetId}/values/'TimeFullYear (Input Here)'!A1?valueInputOption=${VALUE_INPUT_OPTION.USER_ENTERED}&key=${AUTH_SHEETS_API_KEY}`, {
    range: "TimeFullYear (Input Here)!A1",
    majorDimension: "ROWS",
    values: [
        [
            "NAMESS"
        ]
    ]
})

问题现象

日志显示执行成功但返回结果为undefined:

SUCCESS - write to timecards: undefined

Google Sheets表格无任何更新。

已知信息

  • OAuth认证状态正常,Google Sheets的GET请求可正常工作
  • 已启用权限范围:https://www.googleapis.com/auth/spreadsheets

补充说明

  • VALUE_INPUT_OPTION.USER_ENTERED对应字符串"USER_ENTERED"

解决建议

  1. 修正认证方式:当前请求用的是API密钥(key=${AUTH_SHEETS_API_KEY}),但OAuth认证需要在请求头中携带Bearer令牌,而非API密钥。API密钥仅适用于无需用户授权的公共数据访问,写入操作必须使用授权后的access_token。修改请求头:
headers: {
    Authorization: `Bearer ${从Firebase获取的有效access_token}`
}
  1. 返回请求结果并捕获错误:原代码未返回Axios响应,导致日志输出undefined。添加返回逻辑和错误捕获,排查潜在问题:
const doWriteToGoogleSheets = async (sheetId, sheetName, range, majorDimension) => {
    try {
        const response = await axios.put(
            `https://sheets.google.com/v4/spreadsheets/${sheetId}/values/${sheetName}!${range}?valueInputOption=${VALUE_INPUT_OPTION.USER_ENTERED}`,
            {
                majorDimension: "ROWS",
                values: [["NAMESS"]]
            },
            {
                headers: {
                    Authorization: `Bearer ${你的Firebase access_token}`
                }
            }
        );
        console.log("SUCCESS - write to timecards:", response.data);
        return response.data;
    } catch (error) {
        console.error("写入表格失败:", error.response?.data || error.message);
        throw error;
    }
}
  1. 优化Sheet名称处理:当Sheet名称包含空格或特殊字符时,可使用encodeURIComponent(sheetName)对名称进行URL编码后再拼接,避免解析异常。

  2. 简化请求体参数:请求URL已指定更新范围,可省略请求体中的range字段,减少参数冗余。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:12:47