有没有一种方法可以使用gspread更新Google表格过滤器视图范围?

时间:2020-03-21 02:02:58

标签: python filter view gspread amend

我有一个Google工作表,其中包含多个过滤器视图,其范围跨整个Spreadseet(范围:A1:D)。由于当前有9行数据,因此过滤器视图的范围设置为A1:D9。我经常使用带有gspread库的python脚本将其添加到此电子表格中,因此,我必须手动更新过滤器视图的范围以包含电子表格的新大小。

有没有办法通过代码做到这一点?我发现了很多有关此功能的文章,但没有代码片段可供我学习。我自己尝试调查此问题的过程涉及在IDE上通过调试运行脚本,以尝试找到电子表格对象的任何属性,该属性包含存储过滤器视图的任何类型的变量,但我找不到任何东西。

我要的可能吗?

1 个答案:

答案 0 :(得分:0)

通过查看gspread库之外的内容,最终我找到了答案。 Google Sheets API v4最终给出了答案:

row.getValuesMap(fieldNames)

我最终将上述代码的一部分放入

的方法信息中
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()

插入循环并获取我有兴趣更新的所有选项卡和filterviews的ID。希望这对某人有用,因为它使我困扰了好多年!