有办法用gspread更新google表的过滤视图范围吗?

问题描述 投票:0回答:1

我有一个google表,它包含多个过滤视图,其范围跨越整个spreadseet(范围:A1:D),由于目前有9行数据,过滤视图的范围被设置为A1:D9.我经常使用gspread库的python脚本来添加这个电子表格,结果,我必须手动更新过滤视图的范围。我经常使用带有gspread库的python脚本向这个电子表格添加数据,因此,我必须手动更新过滤器视图的范围以包含电子表格的新大小。

有什么办法可以通过代码来实现吗?我找到了各种关于它的帖子,暗示了这样一个功能,但没有代码片段供我学习。我试图自己调查这个问题,包括在IDE上通过调试运行我的脚本,试图找到我的电子表格对象的任何属性,其中包含任何类型的变量存储过滤视图,但我无法找到任何东西。

我所要求的是可能的吗?

python filter view gspread amend
1个回答
0
投票

最终,我通过在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。希望这对别人有用,因为这让我困惑了很久。

© www.soinside.com 2019 - 2024. All rights reserved.