Gspread не очищает правильную вкладку

У меня есть "бюджет" DataFrame, который я пытаюсь загрузить в тяжелую электронную таблицу с 22 вкладками и более чем 1 с RawData в той или иной форме в своем имени: "Raw Data >>", "RawData", "RawData_TargetCompletion"

У меня есть следующий код:

class GoogleSheets():
    def __init__(self):
        google_service_account_path = 'some_path'
        scopes = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
        self.credentials = ServiceAccountCredentials.from_json_keyfile_name(google_service_account_path, scopes)
        self.sheets_connection = gspread.authorize(self.credentials)

    def load_spreadsheet(self, spreadsheet_key):
        self.sheet = self.sheets_connection.open_by_key(spreadsheet_key)

    def load_worksheet(self, worksheet_name):
        self.worksheet = self.sheet.worksheet(worksheet_name)

    def clear_range(self, data_range):
        self.sheet.values_clear(data_range)


spreadsheet_key = "this is a spreadsheet key"
worksheet_name = "RawData"
cell_ref = 'A:AT'
google_sheets = sheets.GoogleSheets()
google_sheets.load_spreadsheet(spreadsheet_key)
google_sheets.load_worksheet(worksheet_name)
google_sheets.clear_range(cell_ref)
google_sheets.upload_dataframe(budget)

У меня проблема в том, что в этой тяжелой электронной таблице очищается первая вкладка (не RawData) и обновляется лист RawData.

Этот точно такой же код, но с другим ключом электронной таблицы отлично работает и очищает и обновляет правильную вкладку RawData независимо от положения этой вкладки RawData. Но в этом тяжелом случае RawData должна быть первой вкладкой в ​​документе, потому что четкая часть не отображается правильно и всегда очищает первую вкладку.

Есть ли проблема, которую вы видите в коде, которую я не вижу, или вы столкнулись с той же проблемой при обновлении тяжелых электронных таблиц?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
115
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я считаю, что ваша цель, как ситуация следующим образом.

  • Вы хотите очистить диапазон с помощью gspread.
  • Вы уже могли использовать Sheets API.

Точки модификации:

  • Когда я увидел values_clear(range) в документе gspread, мне показалось, что это метод класса gspread.models.Spreadsheet. Ссылка И, range из values_clear(range) это A1Notation.
    • В вашем скрипте запускается self.sheet.values_clear('A:AT'). В этом случае всегда используется 1-я вкладка, поскольку имя листа не используется. Я думал, что это причина вашей проблемы.
  • Чтобы устранить вашу проблему, я хотел бы предложить использовать имя листа в A1Notation для values_clear(range).

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

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

From:
google_sheets.clear_range(cell_ref)
To:
google_sheets.clear_range("'{0}'!{1}".format(worksheet_name, cell_ref))

Использованная литература:

@Cateban Спасибо за ответ. Я рад, что ваша проблема была решена.

Tanaike 29.12.2020 02:33

Другие вопросы по теме

Как объединить несколько строк одного и того же фрейма данных? Или как объединить несколько значений одной и той же пары ключей в python?
Среднее значение, медиана и режим списка значений (SCORE) для определенного почтового индекса за каждый год
Панды объединяют несколько строк в одну, добавляя определенный столбец
Как преобразовать столбец данных pandas в массив изображений, то есть в массив numpy с формой (n, n) в Python?
Распечатайте определенные переменные на основе индекса времени в xarray.Dataset
Как я могу сделать новый столбец «Неделя» в фрейме данных в pandas?
Показать все ячейки в фрейме данных Pandas, которые удовлетворяют определенному условию
Показать первые n строк для каждого столбца в фрейме данных Pandas
Как установить заголовки столбцов при преобразовании dict в pandas DataFrame (где имена столбцов не соответствуют ключам dict)?
Конвертировать/очистить очищенные данные в pandas dataframe python