gpt4 book ai didi

python-3.x - Python Google Sheets API 通过单个批量更新更新值和工作表属性

转载 作者:行者123 更新时间:2023-12-04 08:51:08 24 4
gpt4 key购买 nike

我想知道我想要更新到电子表格的一系列值是否可以在单个批量更新中与电子表格属性更新一起发送?例如(下面的代码)我想更新电子表格属性(添加工作表),然后将数据添加到同一个新添加的工作表中。如果可以使用单个请求完成,如何实现? (没有提出 1 个请求 .values().batchUpdate() 和第二个 .batchUpdate())
我有以下几点:

REQUESTS = []

# addSheet request
REQUESTS.append({"addSheet": {"properties": {"title": "MySheet",'sheetId': '0'}}})

# add value request
REQUESTS.append({'range':'MySheet!A1', 'values': list_of_lists, 'majorDimension':'COLUMNS'})

# create a request body
body = {"requests": REQUESTS}
# make update
sheet_service.spreadsheets().batchUpdate(spreadsheetId=sheet_id, body=body).execute()
上面的代码返回以下错误:
"Invalid JSON payload received. Unknown name "range" at 'requests[1]': Cannot find field.
Invalid JSON payload received. Unknown name "values" at 'requests[1]': Cannot find field.
Invalid JSON payload received. Unknown name "majorDimension" at 'requests[1]': Cannot find field.". Details: "[{'@type': 'type.googleapis.com/google.rpc.BadRequest', 'fieldViolations': [{'field': 'requests[1]', 'description': 'Invalid JSON payload received. Unknown name "range" at \'requests[1]\': Cannot find field.'}, {'field': 'requests[1]', 'description': 'Invalid JSON payload received. Unknown name "values" at \'requests[1]\': Cannot find field.'}, {'field': 'requests[1]', 'description': 'Invalid JSON payload received. Unknown name "majorDimension" at \'requests[1]\': Cannot find field.'}]}]">
谢谢

最佳答案

我相信你的目标如下。

  • 您想在 Google 电子表格中插入新工作表。
  • 您想将值添加到插入的工作表中。
  • 您想使用Sheets API 中的batchUpdate 方法通过一个API 调用来实现上述2 个过程。
  • 您想使用 googleapis for python 实现上述目标。

  • retrofit 要点:
  • 在这种情况下,为了将值添加到插入的工作表中,我想建议手动添加工作表 ID 作为唯一值。
  • 我认为可以使用您的第一个请求正文。但是您的第二个请求正文不能用于 batchUpdate 方法。

  • 当以上几点反射(reflect)到你的脚本中时,它变成如下。
    修改后的脚本:
    spreadsheet_id = '###'  # Please set the Spreadsheet ID.
    list_of_lists = [['sample value 1', 123, 456], ['sample value 2', 789, 123]] ## Please set your values.

    sheet_service = build('sheets', 'v4', credentials=creds)
    rows = []
    for r in list_of_lists:
    col = []
    for c in r:
    col.append({"userEnteredValue": ({"numberValue": c} if str(c).replace('.', '', 1).isdigit() else {"stringValue": c})})
    rows.append({"values": col})
    print(rows)
    new_sheet_id = 123456
    body = {
    "requests": [
    {
    "addSheet": {
    "properties": {
    "title": "MySheet",
    "sheetId": new_sheet_id
    }
    }
    },
    {
    "updateCells": {
    "start": {
    "sheetId": new_sheet_id,
    "rowIndex": 0,
    "columnIndex": 0
    },
    "rows": rows,
    "fields": "userEnteredValue"
    }
    }
    ]
    }
    res = sheet_service.spreadsheets().batchUpdate(spreadsheetId=spreadsheet_id, body=body).execute()
    print(res)
  • 在此示例脚本中,123456 用作插入工作表的工作表 ID。如果此值已被使用,请更改它。
  • 在此示例脚本中,字符串和数字类型用作插入工作表的附加值。如果您想使用其他类型,请根据您的实际情况修改上述脚本。

  • 引用:
  • Method: spreadsheets.batchUpdate
  • AddSheetRequest
  • UpdateCellsRequest
  • 关于python-3.x - Python Google Sheets API 通过单个批量更新更新值和工作表属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64099894/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com