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

如何用PHP Curl写入Google表格?已实现读取但写入失败求助

解决Google Sheets写入操作的问题

嘿,我看到你已经搞定了Google Sheets的读取逻辑,现在卡在写入上了——别担心,我来帮你捋清楚怎么用cURL实现写入,顺便给你提几个关键的注意点!

首先要明确:API密钥不能用于写入

你之前用的api_key只能用来读取公开可访问的表格数据,写入操作涉及修改数据,Google要求必须用OAuth 2.0授权(比如服务账号令牌或者用户OAuth令牌),这是你之前读取正常但写入失败的核心原因之一。

覆盖指定范围的写入代码(PUT请求)

如果想覆盖表格中某个指定范围的数据,可以用PUT请求,代码示例如下:

// 替换成你的表格ID
$sheet_id = '你的表格ID';
// 要写入的目标范围,比如Sheet1!A4:A6
$range = 'Sheet1!A4:A6';
// 替换成你的OAuth访问令牌(从服务账号或用户授权获取)
$access_token = '你的OAuth访问令牌';

// 准备要写入的数据:二维数组,子数组对应行,元素对应列
$values = [
    ['新数据行1'],
    ['新数据行2'],
    ['新数据行3']
];

// 构造请求体
$request_body = json_encode([
    'values' => $values
]);

// 写入请求的URL,必须包含valueInputOption参数
$url_write = "https://sheets.googleapis.com/v4/spreadsheets/{$sheet_id}/values/{$range}?valueInputOption=USER_ENTERED";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url_write);
// 覆盖写入用PUT请求
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_POSTFIELDS, $request_body);
// 设置关键请求头:授权和内容类型
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer {$access_token}",
    "Content-Type: application/json"
]);
// 保留你之前的其他cURL设置
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$output = curl_exec($ch);
$response = json_decode($output);

// 错误处理
if(curl_errno($ch)){
    echo 'cURL请求错误:' . curl_error($ch);
} else {
    if(isset($response->error)){
        echo 'API返回错误:' . $response->error->message;
    } else {
        echo "写入成功!共更新了{$response->updatedCells}个单元格";
    }
}

curl_close($ch);

追加数据到表格末尾(POST请求)

如果不想覆盖现有数据,而是在指定范围的下方追加新行,可以用POST请求调用values:append接口:

// 追加请求的URL,注意加上:append和insertDataOption参数
$url_append = "https://sheets.googleapis.com/v4/spreadsheets/{$sheet_id}/values/{$range}:append?valueInputOption=USER_ENTERED&insertDataOption=INSERT_ROWS";

// 其他设置和上面一致,只需要把请求方法改成POST
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');

关键参数说明

  • valueInputOption:
    • USER_ENTERED:让Google Sheets像处理用户手动输入一样解析数据(比如公式会被计算、日期会被识别)
    • RAW:直接写入纯文本,不做任何解析
  • insertDataOption(仅追加时需要):
    • INSERT_ROWS:插入新行来容纳数据,不会覆盖现有行
    • OVERWRITE:覆盖指定范围内的现有数据

必须注意的权限问题

  1. 不管用哪种OAuth授权方式,确保你的授权账号(比如服务账号的邮箱)拥有表格的编辑权限——你需要手动把表格共享给这个邮箱(在服务账号的密钥JSON文件里可以找到该邮箱)。
  2. 如果你还没有OAuth令牌,推荐用Google服务账号来生成,适合服务器端的自动化操作。

如果遇到问题,直接打印$output查看API返回的具体错误信息,大部分问题都是权限、范围格式或者令牌无效导致的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:55:42