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

如何用Python通过Google Sheets API批量更新向指定列输入值列表

解决Google Sheets API向同一列连续行写入数据的问题

你当前的updateCells请求结构错误,导致数据被写入同一行的多列。要实现同一列连续行写入,需要调整rows数组的结构:每个row对象对应一行数据,且每个row的values数组只包含一个单元格的内容(对应目标列)。

修改后的请求体示例

"updateCells": {
    "rows": [
        {
            "values": [
                {
                    "userEnteredValue": {
                        "numberValue": 5
                    }
                }
            ]
        },
        {
            "values": [
                {
                    "userEnteredValue": {
                        "numberValue": 5
                    }
                }
            ]
        },
        {
            "values": [
                {
                    "userEnteredValue": {
                        "numberValue": 5
                    }
                }
            ]
        }
    ],
    "range": {
        "startColumnIndex": 10,
        "endColumnIndex": 11,
        "startRowIndex": 0
    },
    "fields": "userEnteredValue"
}

关键结构说明

  • rows数组包含3个row对象,每个对象对应一行数据
  • 每个row的values数组只有一个元素,对应第11列(startColumnIndex:10,索引从0开始)的单元格
  • range指定了目标列(10到11),起始行是0,所以三个值会依次写入第0、1、2行的第11列

Python代码调用示例

如果使用google-api-python-client库,完整调用代码大致如下:

from googleapiclient.discovery import build
from google.oauth2 import service_account

# 加载服务账号密钥
SERVICE_ACCOUNT_FILE = 'your-service-account-key.json'
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']

creds = service_account.Credentials.from_service_account_file(
    SERVICE_ACCOUNT_FILE, scopes=SCOPES)

# 构建Sheets API客户端
service = build('sheets', 'v4', credentials=creds)
spreadsheet_id = 'your-spreadsheet-id'

# 构造请求体
request_body = {
    "requests": [
        {
            "updateCells": {
                "rows": [
                    {"values": [{"userEnteredValue": {"numberValue": 5}}]},
                    {"values": [{"userEnteredValue": {"numberValue": 5}}]},
                    {"values": [{"userEnteredValue": {"numberValue": 5}}]}
                ],
                "range": {
                    "startColumnIndex": 10,
                    "endColumnIndex": 11,
                    "startRowIndex": 0
                },
                "fields": "userEnteredValue"
            }
        }
    ]
}

# 发送请求
response = service.spreadsheets().batchUpdate(
    spreadsheetId=spreadsheet_id, body=request_body).execute()

print(f"更新完成,影响单元格数:{response.get('totalUpdatedCells')}")

另一种简化方式:使用values.update方法

如果不需要复杂的批量操作,也可以用更简洁的values.update方法,直接指定范围写入列数据:

# 要写入的数据,每个元素对应一行
values = [[5], [5], [5]]
range_name = 'K1:K3'  # 对应第11列,第1到3行(注意Sheets的行列标识从1开始)

response = service.spreadsheets().values().update(
    spreadsheetId=spreadsheet_id,
    range=range_name,
    valueInputOption='USER_ENTERED',
    body={'values': values}
).execute()

print(f"更新完成,更新行数:{response.get('updatedRows')}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 06:30:21