python - 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 必须是文档中的第一个选项卡,因为清除部分没有正确映射并且总是清除第一个选项卡。
您是否在我没有看到的代码中看到了问题,或者您在更新繁重的电子表格时遇到了同样的问题?
解决方案
我相信您的目标如下。
- 您想使用 gspread 清除范围。
- 您已经能够使用 Sheets API。
修改点:
- 在
values_clear(range)
gspread的文档中看到,好像是gspread.models.Spreadsheet类的方法。Ref And,range
ofvalues_clear(range)
是 A1Notation。- 在您的脚本中,
self.sheet.values_clear('A:AT')
运行。在这种情况下,始终使用第一个选项卡,因为不使用工作表名称。我认为这是您问题的原因。
- 在您的脚本中,
- 为了消除您的问题,我想建议将工作表名称用于 A1Notation for
values_clear(range)
.
当以上几点反映到您的脚本时,它变成如下。
修改后的脚本:
从:google_sheets.clear_range(cell_ref)
到:
google_sheets.clear_range("'{0}'!{1}".format(worksheet_name, cell_ref))
参考:
推荐阅读
- javascript - Jquery .val() 中的多个变量 - 多选更新
- c++ - 当调用 openssl 加密数据时,CryptDecrypt 失败并显示 ERROR_INVALID_PARAMETER
- android - Android上的ImageBackground重复没有填满屏幕
- laravel - 列出表中的所有值并查询整数列的实际值并显示在视图中
- python - sklearn 管道:在 GridSearchCV 中应用 TimeSeriesSplit 之前,在完整的训练集上运行 TfidfVectorizer?
- google-sheets - 列出按另一列分组的唯一值
- java - IntelliJ 没有看到错误,但编译器在使用 RX 和 lambdas 时会出现错误?
- r - 在第 1,3,5 列中找到 1 的运行长度,并在第 2,4,6 列中找到连续两个 1 的计数数据在 R 的数据框中
- r - 如何在 Rshiny 网页中使用 sql 查询作为输出
- python - 如何在 Centos 上运行 sqlite3?