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

时间:2019-02-14 15:40:23

标签: python google-sheets google-api google-sheets-api google-api-v4

我有数据为 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 个答案:

答案 0 :(得分:1)

  • 您要使用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"]],请将rows修改为rows = [{'values': [{'userEnteredValue': {'stringValue': f[0]}} for f in e]} for e in table_data]

参考:

如果我误解了你的问题,我表示歉意。