#python #google-sheets-api
#python #google-sheets-api
Вопрос:
Мне нужно удалить определенную строку из листов с помощью Python. В наших таблицах тысячи записей, и данные регулярно обновляются, и, поскольку все делается с использованием Python, эту задачу также необходимо выполнить с использованием Python.
Теперь это то, что я получил до сих пор, из документации и других руководств:
def connect_to_sheet():
creds = None
if os.path.exists('token.pickle'):
with open('token.pickle', 'rb') as token:
creds = pickle.load(token)
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file(
'credentials.json', SCOPES)
creds = flow.run_local_server(port=0)
with open('token.pickle', 'wb') as token:
pickle.dump(creds, token)
service = build('sheets', 'v4', credentials=creds)
sheet = service.spreadsheets()
return sheet
Подключение к листу должно было быть выполнено в другой функции, потому что я использую его несколько раз в другом месте, но в следующей функции я делаю запрос и получаю ошибку:
request_body = {
"requests": [
{
"deleteDimension": {
"range": {
"sheetId": SheetID,
"dimension": "ROWS",
"startIndex": startIndex,
"endIndex": endIndex
}
}
}
]
}
result = sheet.values().batchUpdate(spreadsheetId=SPREADSHEET_ID_4G,body=request_body).execute()
Ошибка:
<HTTPError 400 при запросе https://sheets.googleapis.com/v4/spreadsheets/sheetID/values:batchUpdate?alt=json возвращено » Получена недопустимая полезная нагрузка JSON. Неизвестное имя «запросы»: не удается найти поле.». Подробности: «[{‘@type’: ‘type.googleapis.com/google.rpc.BadRequest ‘, ‘fieldViolations’: [{‘description’: ‘Получена недопустимая полезная нагрузка JSON. Неизвестное имя «запросы»: не удается найти поле.’}]}]»>
Каждый пример и аналогичный вопрос по SOF, который я искал, использует один и тот же запрос! Но я все еще не мог понять проблему, вызывающую эту ошибку.
любая помощь будет очень признательна, спасибо.
Ответ №1:
Точки изменения:
deleteDimension
используется для метода spreadsheets.batchUpdate в API Sheets. Но в вашем скрипте это используется с методом spreadsheets.values.batchUpdate . Я думаю, что это причина вашей проблемы.
Когда вышеуказанные пункты будут отражены в вашем скрипте, это будет выглядеть следующим образом.
Модифицированный скрипт:
От:
result = sheet.values().batchUpdate(spreadsheetId=SPREADSHEET_ID_4G,body=request_body).execute()
Для:
result = sheet.batchUpdate(spreadsheetId=SPREADSHEET_ID_4G,body=request_body).execute()
- В вашем скрипте, я думаю, что тело вашего запроса для метода spreadsheets.batchUpdate является правильным.
- В качестве дополнительной информации, например, если вы хотите удалить строки от 1 до 2, пожалуйста, установите
startIndex
иendIndex
как0
и2
, соответственно.
Примечание:
- В этой модификации предполагается, что ваш
sheet
можно использовать для использования метода spreadsheets.batchUpdate .
Ссылки:
Комментарии:
1. Это сработало! Вы понятия не имеете, сколько кода вы только что сэкономили мне. Большое спасибо!
2. @KiDo Спасибо за ответ и тестирование. Я рад, что ваша проблема была решена. И вам спасибо.