如何在 google 工作表 API 中应用过滤器后获取电子表格的范围?

How to get ranges of spreadsheets after applying filter in google sheets API?

我有一个 google 点差sheet。我使用 python 脚本和 google sheets python api 来操纵我的 sheet。我首先使用 setBasicFilterRequest 在 google sheet 上设置基本过滤器,如下所示:


setBasicFilterRequest = {
    'setBasicFilter' : {
        'filter' : _filter
    }
}

body = { 
    'requests' : [setBasicFilterRequest],
}

resp = service.spreadsheets() \
   .batchUpdate(spreadsheetId=SAMPLE_SPREADSHEET_ID, body=body).execute()

这对我的传播设置了一个过滤器sheet,当我在浏览器上看到它时,我只看到过滤后的行。这很棒。现在在这个脚本中,我想获取当前在浏览器 sheet 上可见的范围。例如,当我设置我的基本过滤器时,google sheet 视图更新为仅显示过滤后的行,我看到行 [2, 11, 27, 31, 55]。现在,我想在我的 python 脚本中获取此列表。这有可能实现吗?

我相信你的目标如下。

  • 您想在 sheet.
  • 中检索过滤行的行号
  • 您想使用 googleapis 实现此目的 python。

问题和解决方法:

在这种情况下,不幸的是,无法直接从表格中检索行号 API。所以需要做如下流程

  1. 使用 Sheets API.
  2. 中的“spreadsheets.get”方法检索 sheet 的 rowMetadata
  3. 使用脚本从 rowMetadata 的值中检索筛选的行。

当这个流程反映到脚本中,就变成了下面这样

示例脚本:

在此示例脚本中,请为 credentials=credscreds 使用您的授权脚本。

spreadsheet_id = "###" # Please set the Spreadsheet ID.
sheetName = "Sheet1" # Please set the sheet name.

service = build('sheets', 'v4', credentials=creds)
fields = 'sheets(data(rowMetadata(hiddenByFilter)))'
res = service.spreadsheets().get(spreadsheetId=spreadsheet_id, ranges=sheetName, fields=fields).execute()
filteredRows = {"shownRows": [], "hiddenRows": []}
rowMetadata = res["sheets"][0]["data"][0]["rowMetadata"]
for i, r in enumerate(rowMetadata):
    filteredRows["hiddenRows" if "hiddenByFilter" in r and r["hiddenByFilter"] else "shownRows"].append(i + 1)
print(filteredRows)
  • 在此脚本中,sheets(data(rowMetadata(hiddenByFilter))) 用作 fields

结果:

当上述脚本为运行时,得到如下结果

{
  "shownRows": [#, #, #,,,],
  "hiddenRows": [#, #, #,,,]
}
  • shownRows是基本过滤器显示的行号。
  • hiddenRows是基本过滤器隐藏的行号。

注:

  • 来自,我认为您已经了解了使用查询语言的方法。所以在这个回答中,我介绍了使用Sheets API.
  • 的方法

参考: