Невозможно вставить диапазон в листы Google в Python - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть массив с данными table_data = [["11"],["22"]],[["33"],["44"]] И я хочу вставить эти данные в Google Sheets с помощью обновления sheet.values ​​()., Но с помощью 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()

Но это неудобно для диапазона А1: В2.Я хочу использовать что-то вроде этого

'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 голосов
/ 15 февраля 2019
  • Вы хотите поместить значения, используя 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"]].

Если мое понимание верно, как насчет использованияметод "updateCells" из batchUpdate вместо "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].

Ссылка:

Если я неправильно понял ваш вопрос, прошу прощения.

...