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

使用Python与Spreadsheets API的batchUpdate和appendCells时遇报错

问题解决:Google Sheets batchUpdate oneof字段冲突

错误根源

你把addSheet和appendCells两个操作塞进了同一个request对象里,而Google Sheets API的batchUpdate要求每个request只能包含一种操作类型(这是oneof字段的限制),所以触发了"oneof field 'kind' is already set"的错误。

修正方案

把两个操作拆成独立的request项,放在requests数组中。另外注意:新建工作表的sheetId不能直接用0(默认sheet的id通常是0,但新建的sheet会生成新id),要么手动指定一个自定义id,要么先获取新建sheet的id再执行追加操作。

修正后的代码示例

方式1:手动指定sheetId

sheet_values = []
for row in ws:
    row_data = {'values': []}
    for cell in row:
        row_data['values'].append({
            'userEnteredValue': {'stringValue': cell.value},
            'userEnteredFormat': {'horizontalAlignment': 'LEFT'}
        })
    sheet_values.append(row_data)

# 拆分两个操作到不同的request
request_data = {"requests": [
    {
        "addSheet": {
            "properties": {
                "title": 'sheet_name',
                "sheetId": 123456  # 自定义一个唯一的sheetId
            }
        }
    },
    {
        "appendCells": {
            "sheetId": 123456,  # 和上面的sheetId保持一致
            "fields": "userEnteredValue, userEnteredFormat",
            "rows": sheet_values
        }
    }
]}

方式2:动态获取新建sheet的id

如果不想手动指定id,可以先执行新建sheet的请求,从响应中提取id再执行追加:

# 先构造新建sheet的请求
create_sheet_request = {"requests": [
    {
        "addSheet": {
            "properties": {
                "title": 'sheet_name'
            }
        }
    }
]}

# 执行新建请求并获取sheetId
response = service.spreadsheets().batchUpdate(
    spreadsheetId="你的表格ID",
    body=create_sheet_request
).execute()
new_sheet_id = response['replies'][0]['addSheet']['properties']['sheetId']

# 构造追加单元格的请求
append_request = {"requests": [
    {
        "appendCells": {
            "sheetId": new_sheet_id,
            "fields": "userEnteredValue, userEnteredFormat",
            "rows": sheet_values
        }
    }
]}

# 执行追加请求
service.spreadsheets().batchUpdate(
    spreadsheetId="你的表格ID",
    body=append_request
).execute()

额外检查

你的sheet_values构造逻辑是正确的,每个单元格包含了userEnteredValue和userEnteredFormat,符合appendCells的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 13:20:34