API GoogleSheets: «Получено недопустимое значение JSON. Неизвестное имя« Number »в« data.values ​​[0] »: поле не найдено - PullRequest
1 голос
/ 21 февраля 2020

Я пытаюсь скопировать содержимое электронной таблицы в другую электронную таблицу, но ошибка продолжает появляться. Не могли бы вы помочь выяснить, почему он не копирует данные с одного листа на другой? Это фиктивные данные, над которыми я экспериментирую на исходном листе:

1   CHANGED London 
2   5   Budapest
3   4   Prague
4   11  Madrid
4   11  Madrid

Вот так выглядит лист назначения:

2   5   Budapest
2   5   Budapest
2   5   Budapest

Это часть ошибки, которую я получаю:

Invalid JSON payload received. Unknown name "Weather" at 'data.values[0]': Cannot find field.
Invalid JSON payload received. Unknown name "City" at 'data.values[0]': Cannot find field.
Invalid JSON payload received. Unknown name "Number" at 'data.values[1]': Cannot find field.
Invalid JSON payload received. Unknown name "Weather" at 'data.values[1]': Cannot find field.
Invalid JSON payload received. Unknown name "City" at 'data.values[1]': Cannot find field.
Invalid JSON payload received. Unknown name "Number" at 'data.values[2]': Cannot find field.

А это скрипт:

from oauth2client.service_account import ServiceAccountCredentials
from pprint import pprint
from googleapiclient import discovery
scope = ["https://spreadsheets.google.com/feeds",'https://www.googleapis.com/auth/spreadsheets',"https://www.googleapis.com/auth/drive.file","https://www.googleapis.com/auth/drive"]
creds = ServiceAccountCredentials.from_json_keyfile_name("creds.json", scope )
client = gspread.authorize(creds)

LT = client.open("LetsTry").sheet1
LT_data = LT.get_all_records()
NQ_all = client.open("NQ_all").sheet1
NQ_all_data = NQ_all.get_all_records()

service = discovery.build('sheets', 'v4', credentials=creds)
spreadsheetId = 'xyz'
range = 'Sheet1!A1:C11'
body = {
    'values': LT_data
}
result = service.spreadsheets().values().append(
    spreadsheetId=spreadsheetId, 
    range = range,
    valueInputOption= 'RAW',
    body=body).execute()
print('{0} cells updated.'.format(result.get('updatedCells')))

1 Ответ

0 голосов
/ 22 февраля 2020

Как насчет этого ответа?

В вашем скрипте значения, полученные с помощью LT_data = LT.get_all_records(), используются в теле запроса метода spreadsheets.values.append в Sheets API. В этом случае LT_data полученное значение - JSON объект. Но values тела запроса должно быть двухмерным массивом. Я думаю, что причиной вашего сообщения об ошибке является следующее.

Чтобы избежать этой ошибки, как насчет следующей модификации?

Модифицированный скрипт:

Когда ваш скрипт изменено, пожалуйста, измените его следующим образом.

С:
LT_data = LT.get_all_records()
До:
LT_data = LT.get_all_values()
  • Значение, полученное с помощью get_all_values(), представляет собой двумерный массив. Таким образом, в этом случае его можно использовать для body = {'values': LT_data}.

Примечание:

  • Этот ответ предполагает, что вы уже смогли получить и поместить значения для Google Электронная таблица с использованием gspread и googleapis для python с учетной записью службы.
  • В вашем случае для доступа к таблицам client.open("LetsTry") и spreadsheetId = 'xyz' необходима учетная запись службы. Пожалуйста, будьте осторожны.

Ссылки:

Если я неправильно понял ваш вопрос, и это был не тот результат, который вы хотите, я приношу свои извинения.

...