我有一个google表,它包含多个过滤视图,其范围跨越整个spreadseet(范围:A1:D),由于目前有9行数据,过滤视图的范围被设置为A1:D9.我经常使用gspread库的python脚本来添加这个电子表格,结果,我必须手动更新过滤视图的范围。我经常使用带有gspread库的python脚本向这个电子表格添加数据,因此,我必须手动更新过滤器视图的范围以包含电子表格的新大小。
有什么办法可以通过代码来实现吗?我找到了各种关于它的帖子,暗示了这样一个功能,但没有代码片段供我学习。我试图自己调查这个问题,包括在IDE上通过调试运行我的脚本,试图找到我的电子表格对象的任何属性,其中包含任何类型的变量存储过滤视图,但我无法找到任何东西。
我所要求的是可能的吗?
最终,我通过在gspread库之外寻找到了答案。Google sheets API v4最终有了答案。
from oauth2client.service_account import ServiceAccountCredentials
from googleapiclient import discovery
scope = ['https://spreadsheets.google.com/feeds']
credentials = ServiceAccountCredentials.from_json_keyfile_name('creds.json', scope)
service = discovery.build('sheets', 'v4', credentials=credentials)
update_filter_view_request = {
'updateFilterView': {
'filter': {
'filterViewId': filter_view_id,
'range': {"sheetId": '''tab id goes here''',
"startRowIndex": 0, # 0 is A
"endRowIndex": 3, # 3 is D
"startColumnIndex": 0,
"endColumnIndex": '''updated range value'''}
},
'fields': {
'paths': ['*']
}
}
}
service.spreadsheets().batchUpdate(spreadsheetId='''spreadsheet ID goes here''', body={'requests': [update_filter_view_request]}).execute()
我最后把上面的部分代码放到了一个方法信息里,从...
resp = service.spreadsheets().get(spreadsheetId=sheet_id).execute()
以插入一个循环,并得到我有兴趣更新的所有标签和过滤视图的ID。希望这对别人有用,因为这让我困惑了很久。