Gspread 未清除正确的选项卡
Gspread not clearing correct tab
我有一个 DataFrame“预算”,我正在尝试大量上传sheet,其中有 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)
我有一个问题,在那个大传播中sheet,它清除了第一个选项卡(不是 RawData),并更新了 RawData sheet。
这个完全相同的代码,但与另一个 spreadsheet_key 一起工作正常并清除和更新正确的 RawData 选项卡,无论该 RawData 选项卡的位置如何。
但是在这个沉重的部分,RawData 必须是文档中的第一个选项卡,因为清除部分没有正确映射并且总是清除第一个选项卡。
您是否在代码中看到了我没有看到的问题,或者您在更新大量传播时遇到过同样的问题sheets?
我认为您的目标如下。
- 您想使用 gspread 清除范围。
- 您已经可以使用表格 API。
修改点:
- 在gspread的文档里看到
values_clear(range)
,好像是classgspread.models.Spreadsheet的方法。 Ref 而且,values_clear(range)
的 range
是 A1Notation。
- 在您的脚本中,
self.sheet.values_clear('A:AT')
是 运行。在这种情况下,始终使用第一个选项卡,因为未使用 sheet 名称。我想这就是您遇到问题的原因。
- 为了解决您的问题,我建议将 sheet 名称用于
values_clear(range)
的 A1Notation。
当以上几点反映到你的脚本中,就会变成下面这样。
修改后的脚本:
从:
google_sheets.clear_range(cell_ref)
到:
google_sheets.clear_range("'{0}'!{1}".format(worksheet_name, cell_ref))
参考文献:
我有一个 DataFrame“预算”,我正在尝试大量上传sheet,其中有 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)
我有一个问题,在那个大传播中sheet,它清除了第一个选项卡(不是 RawData),并更新了 RawData sheet。
这个完全相同的代码,但与另一个 spreadsheet_key 一起工作正常并清除和更新正确的 RawData 选项卡,无论该 RawData 选项卡的位置如何。 但是在这个沉重的部分,RawData 必须是文档中的第一个选项卡,因为清除部分没有正确映射并且总是清除第一个选项卡。
您是否在代码中看到了我没有看到的问题,或者您在更新大量传播时遇到过同样的问题sheets?
我认为您的目标如下。
- 您想使用 gspread 清除范围。
- 您已经可以使用表格 API。
修改点:
- 在gspread的文档里看到
values_clear(range)
,好像是classgspread.models.Spreadsheet的方法。 Ref 而且,values_clear(range)
的range
是 A1Notation。- 在您的脚本中,
self.sheet.values_clear('A:AT')
是 运行。在这种情况下,始终使用第一个选项卡,因为未使用 sheet 名称。我想这就是您遇到问题的原因。
- 在您的脚本中,
- 为了解决您的问题,我建议将 sheet 名称用于
values_clear(range)
的 A1Notation。
当以上几点反映到你的脚本中,就会变成下面这样。
修改后的脚本:
从:google_sheets.clear_range(cell_ref)
到:
google_sheets.clear_range("'{0}'!{1}".format(worksheet_name, cell_ref))