Python pyghseets-创建基本过滤器?

Python pyghseets-创建基本过滤器?,python,google-sheets,google-sheets-api,gspread,pygsheets,Python,Google Sheets,Google Sheets Api,Gspread,Pygsheets,在pygsheets中,是否可以打开和关闭过滤?我能够将一个数据帧放入一个工作表中,但是如果不手动转到工作表本身,我就无法知道如何打开文件管理器。我的数据帧将改变大小,默认过滤器不够智能,无法随数据增长,因此需要关闭过滤器,然后再次打开 谢谢你的帮助 在Sheets REST API中,删除和/或恢复过滤器相当简单-可以在调用spreadsheetsbatchUpdate时提供两个请求: 包括要在其上删除筛选器的工作表ID,例如{clearBasicFilter:{sheetId:someWor

在pygsheets中,是否可以打开和关闭过滤?我能够将一个数据帧放入一个工作表中,但是如果不手动转到工作表本身,我就无法知道如何打开文件管理器。我的数据帧将改变大小,默认过滤器不够智能,无法随数据增长,因此需要关闭过滤器,然后再次打开


谢谢你的帮助

在Sheets REST API中,删除和/或恢复过滤器相当简单-可以在调用spreadsheetsbatchUpdate时提供两个请求:

包括要在其上删除筛选器的工作表ID,例如{clearBasicFilter:{sheetId:someWorkSheetGridId}} 避免在条件规范中引入错误的一种简单方法是首先查询现有筛选器,并在以下setBasicFilter请求中使用它。如果没有,则在还原活动筛选器时需要重新指定筛选器条件。要简单地恢复UI的过滤能力,不需要提供criteria属性

要查询现有的基本筛选数据,请使用和相应的fields参数将响应限制为仅包含所需信息:fields:SheetsProperties SheetId、title、basicFilter

使用Google API Python客户端并忽略任何响应、错误处理等:

def get_existing_basic_filters(wkbkId: str) -> dict:
    params = {'spreadsheetId': wkbkId,
              'fields': 'sheets(properties(sheetId,title),basicFilter)'}
    response = service.spreadsheets().get(**params).execute()
    # Create a sheetId-indexed dict from the result
    filters = {}
    for sheet in response['sheets']:
        if 'basicFilter' in sheet:
            filters[sheet['properties']['sheetId']] = sheet['basicFilter']
    return filters

def clear_filters(wkbkId: str, known_filters: dict):
    requests = []
    for sheetId, filter in known_filters.items():
        requests.append({'clearBasicFilter': {'sheetId': sheetId}})
    if not requests:
        return
    params = {'spreadsheetId': wkbkId,
              'body': {'requests': requests}}
    service.spreadsheets().batchUpdate(**params).execute()

def apply_filters(wkbkId: str, filters: dict):
    # All requests are validated before any are applied, so bundling the set and clear filter
    # operations in the same request would fail: only 1 basic filter can exist at a time.
    clear_filters(wkbkId, filters)

    requests = []
    for sheetId, filter in filters.items():
        # By removing the starting and ending indices from the 'range' property,
        # we ensure the basicFilter will apply to the entire sheet bounds. If one knows the 
        # desired values for startColumnIndex, startRowIndex, endRowIndex, endColumnIndex,
        # then they can be used to create a range-specific basic filter.
        # The 'range' property is a `GridRange`: 
        filter['range'] = {'sheetId': sheetId}
        requests.append({'setBasicFilter': {'filter': filter}})
    if not requests:
        return
    params = {'spreadsheetId': wkbkId,
              'body': {'requests': requests}}
    service.spreadsheets().batchUpdate(**params).execute()

service = get_authed_sheets_service_somehow()
fileId = "some valid Sheets file id"
my_filters = get_existing_basic_filters(fileId)
pprint(my_filters)
###
# do stuff to `my_filters`
###
apply_filters(fileId, my_filters) 
如果有updateBasicFilter请求,您可以避免此过程,只需使用数据帧的新大小修改现有BasicFilter的范围,但没有这样的请求。您可能可以根据数据帧的大小来确定适合filter GridRange的新范围索引

你可以考虑试一试,看看他们对你的情况是否有用。< /P> 资源:


这是pygsheets的问题吗?还是一个gspread问题?或者这是一个Sheets REST API问题?这是一个pysheets问题。我看到了另一个与谷歌表单相关的问题标签,以防pygsheets不是一个可行的解决方案,而REST是必需的。我可以删除这些标签,但如果它是混乱的。