为了账号安全,请及时绑定邮箱和手机立即绑定

无法在 Python 中将范围插入到 Google 表格中

无法在 Python 中将范围插入到 Google 表格中

动漫人物 2021-11-09 10:59:47
我有带数据的数组,table_data = [["11"],["22"]],[["33"],["44"]] 我想使用 sheet.values().update 将此数据插入到 Google 表格中,但是使用 GridRange,没有命名范围,我可以解决这个问题:service = build('sheets', 'v4', credentials=creds())    sheet = service.spreadsheets()    body = {'values': values}    SAMPLE_RANGE_NAME_2 = 'costs!A1:B2'    value_input_option = 'RAW'    result = sheet.values().update(        spreadsheetId=SAMPLE_SPREADSHEET_ID, range=SAMPLE_RANGE_NAME_2, valueInputOption=value_input_option, body=body).execute()但它不方便使用范围 A1:B2。我想用这样的东西'startColumnIndex': 0,'endColumnIndex': 1,'startRowIndex': 0,'endRowIndex': 1我尝试为此使用batchUpdate,但它只能接受字符串参数spreadsheet_id = SPREADSHEET_ID  # TODO: Update placeholder value.batch_update_spreadsheet_request_body = {        "requests": [            {                "pasteData": {                    "data": str(table_data),                    "type": "PASTE_NORMAL",                    "delimiter": ",",                    "coordinate": {                        "sheetId": 0,                        "rowIndex": 0,                        "columnIndex": 0                    }                }            }        ]    }request = service.spreadsheets().batchUpdate(spreadsheetId=spreadsheet_id, body=batch_update_spreadsheet_request_body)response = request.execute()
查看完整描述

1 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

  • 您想使用 GridRange 放置值。

  • 您想table_data = [["11"],["22"]],[["33"],["44"]]用作值。

    • 我认为如果你想把值放在 2 行和 2 列,它变成table_data = [["11", "22"], ["33", "44"]]. 所以我用了这个。

    • 如果要将11、22、33和44分别放入A1、B1、A2和B2,就变成了table_data = [["11", "22"], ["33", "44"]]

    • 如果要将11、22、33和44分别放入A1、A2、B1和B2,就变成了table_data = [["11", "33"], ["22", "44"]]

如果我的理解是正确的,那么使用batchUpdate的“updateCells”而不是“pasteData”的方法怎么样?我认为针对您的情况有几种解决方案。因此,请将此视为其中之一。

修改后的脚本:

spreadsheet_id = SPREADSHEET_ID

sheetId = 0

table_data = [["11", "33"], ["22", "44"]]  # or table_data = [["11", "22"], ["33", "44"]]

rows = [{'values': [{'userEnteredValue': {'stringValue': f}} for f in e]} for e in table_data]

rng = {'sheetId': sheetId, 'startRowIndex': 0, 'startColumnIndex': 0}

fields = 'userEnteredValue'

body = {'requests': [{'updateCells': {'rows': rows, 'range': rng, 'fields': fields}}]}

request = service.spreadsheets().batchUpdate(spreadsheetId=spreadsheet_id, body=body)

response = request.execute()

  • 将值放入 后A1:B2,您可以设置左上角单元格的坐标。所以在这种情况下,GridRange 变成{'sheetId': sheetId, 'startRowIndex': 0, 'startColumnIndex': 0}

笔记:

  • 如果要使用table_data = [["11"], ["22"]], [["33"], ["44"]],请修改rowsrows = [{'values': [{'userEnteredValue': {'stringValue': f[0]}} for f in e]} for e in table_data]


查看完整回答
反对 回复 2021-11-09
  • 1 回答
  • 0 关注
  • 128 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信