Удаление определенной строки из Google Таблиц с помощью API

#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 Спасибо за ответ и тестирование. Я рад, что ваша проблема была решена. И вам спасибо.