如何用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
相关产品推荐
相关产品推荐

