ОШИБКА при обновлении электронной таблицы с использованием python, Google Seets API, v4: получено несколько значений для аргумента ‘range’

#python #google-sheets #google-api

#python #google-таблицы #google-api

Вопрос:

Я пытаюсь обновить всю электронную таблицу, используя Python, Google Seets API, v4.

Я создал функцию на основе API для обновления базы данных, но выдает следующую ошибку:

 TypeError: update_values() got multiple values for argument 'range'
 

Функции структурированы следующим образом:

 def update_values(self, range, values):
    '''
    documentation: https://developers.google.com/sheets/api/guides/values
    values = [
        [
            # Cell values ...
        ],
        # Additional rows ...
    ]
    '''
    body = {
        'values': values
    }
    result = self.service.spreadsheets().values().update(
        spreadsheetId=self.sheet_id,
        range=range,
        valueInputOption='USER_ENTERED',
        body=body).execute()
    print('{0} cells updated.'.format(result.get('updatedCells')))
 

Функция выполнения заключается в следующем:

 def update(self,values):
    pprint(self.SHEET_NAME[1])
    self.gsheets.update_values(self,
                               range='{}!A1:AD2000'.format(self.SHEET_NAME[1]),
                               values=values
                               )
 

Дополнительные данные для понимания кода:

 SHEET_NAME[1]='sheet_x'
 

gsheets.update_values является первой функцией update_values() в классе gsheets

 range='{}!A1:AD2000'.format(self.SHEET_NAME[1]
 

Комментарии:

1. range чтобы скрыть встроенный range объект, я бы начал с изменения этого имени.

Ответ №1:

Похоже update_values , это метод, и у вас есть экземпляр его класса self.gsheets . Python self автоматически добавляет при вызове метода экземпляра. При вызове update_values(self, range=..., ...) , который self вы вводите, фактически является вторым параметром «range». Просто оставьте этот параметр.

 self.gsheets.update_values(range='{}!A1:AD2000'.format(self.SHEET_NAME[1]),
                           values=values
                           )
 

Комментарии:

1. Я не уверен. Похоже, проблема с декодированием строки JSON. Можете ли вы распечатать сам JSON, чтобы увидеть, что не так? np.NaN является плавающим и поддерживается JSON. Итак, json.loads("NaN") работает. "User Ru ^" выглядит действительно странно. Это не похоже на действительный python (a u unicode escape должен содержать 4 шестнадцатеричных символа) или json. Если вы сможете получить достаточно подробностей, это будет новый вопрос для stackoverflow.