Python pyghseets-创建基本过滤器?
在pygsheets中,是否可以打开和关闭过滤?我能够将一个数据帧放入一个工作表中,但是如果不手动转到工作表本身,我就无法知道如何打开文件管理器。我的数据帧将改变大小,默认过滤器不够智能,无法随数据增长,因此需要关闭过滤器,然后再次打开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
谢谢你的帮助 在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是必需的。我可以删除这些标签,但如果它是混乱的。