【问题标题】:How to get ranges of spreadsheets after applying filter in google sheets API?在谷歌表格 API 中应用过滤器后如何获取电子表格的范围?
【发布时间】:2021-06-22 03:45:14
【问题描述】:

我有一个谷歌电子表格。我使用 python 脚本和谷歌表格 python api 来操作我的表格。我首先使用setBasicFilterRequest 在我的谷歌表格上设置基本过滤器,如下所示:


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

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

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

这会在我的电子表格上设置一个过滤器,当我在浏览器上看到它时,我只会看到过滤后的行。这很棒。现在在这个脚本中,我想获取当前在浏览器工作表上可见的范围。例如,当我设置我的基本过滤器时,谷歌工作表视图被更新为只显示过滤的行,我看到行[2, 11, 27, 31, 55]。现在,我想在我的 python 脚本中获取这个列表。这有可能实现吗?

【问题讨论】:

  • 我的回答是否向您展示了您想要的结果?你能告诉我吗?这对我学习也很有用。如果这可行,与您有相同问题的其他人也可以将您的问题作为可以解决的问题。如果您对我的回答有疑问,我深表歉意。到时候,可以问一下你现在的情况吗?我想学习解决你的问题。
  • 嘿@Tanaike,很抱歉有一段时间没有回复。实际上我生病了,没有时间来测试这个。我对此进行了测试,这是完全正确的,正是我想要的。我再次道歉。你为我做了很多,但显然,我不值得任何帮助。再次抱歉。
  • 感谢您的回复。没问题。并感谢您测试我的答案。我很高兴你的问题得到了解决。也谢谢你。

标签: python google-sheets google-sheets-api google-api-python-client


【解决方案1】:

我相信你的目标如下。

  • 您想要检索工作表中已过滤行的行号。
  • 您想使用 googleapis for python 来实现这一点。

问题和解决方法:

很遗憾,在这种情况下,无法直接从 Sheets API 检索行号。所以需要做如下流程。

  1. 使用 Sheets API 中的“spreadsheets.get”方法检索工作表的rowMetadata
  2. 使用脚本从rowMetadata 的值中检索过滤后的行。

当这个流程反映到脚本中时,变成如下。

示例脚本:

在此示例脚本中,请使用您对credscredentials=creds 的授权脚本。

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 是基本过滤器隐藏的行号。

注意:

  • 来自your previous question,我以为您已经知道使用查询语言的方法。所以在这个答案中,我介绍了使用 Sheets API 的方法。

参考:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 2013-02-11
    • 1970-01-01
    • 2013-11-13
    • 1970-01-01
    • 2017-09-29
    相关资源
    最近更新 更多