当前位置: 首页 > 知识库问答 >
问题:

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

穆季萌
2023-03-14

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


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

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

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

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

共有1个答案

益和雅
2023-03-14

我相信你的目标如下。

  • 要检索工作表中已筛选行的行号

不幸的是,在这种情况下,无法直接从Sheets API检索行号。所以要求做到以下流程。

  1. 使用Sheets API中的“spreadsheets.get”方法检索工作表的rowMetadata

当此流反映到脚本时,它将变成如下所示。

在这个示例脚本中,请使用您的授权脚本用于凭据=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)
  • 在此脚本中,工作表(数据(行元数据(hiddenByFilter))用作字段

当运行上述脚本时,将获得以下结果。

{
  "shownRows": [#, #, #,,,],
  "hiddenRows": [#, #, #,,,]
}
  • show nRow是基本筛选器显示的行号。
  • hiddenRow是基本筛选器隐藏的行号。
  • 从前面的问题中,我认为您已经了解了使用查询语言的方法。所以在这个答案中,我介绍了使用Sheets API的方法
  • 方法:spreadsheets.get

 类似资料:
  • 我正在尝试从特定目录中的google工作表列表(大约570个工作表)中删除多余的行和列(已知范围)。 我能够使用google drive API获取电子表格Id。但是,修改页面的尺寸需要图纸Id。 我无法找到通过驱动器API(文件属性)检索此工作表ID的方法,也无法找到任何关于如何在电子表格中列出可用工作表的留档,因为我有电子表格ID。 我尝试使用谷歌应用程序脚本来达到我的目标,但运行时间已经超过

  • 我的程序是这样工作的:

  • 问题内容: 使用Zuul作为过滤器的代理时,如何读取响应正文? 我试图像这样调用代码: 问题答案: 我设法克服了这一点。该解决方案包括4个步骤: 读入ByteArrayOutputStream 将OutputStream复制到2 InputStreams。 使用其中之一进行自定义。 使用第二个重新分配上下文: 从点1读取流将导致无法再次读取该流,因此,您将传递尚未读取的新的新鲜流

  • 问题内容: Gdata提供了一种基于时间戳仅从Google电子表格中获取更改的单元格的方法。如何为Gdata调用创建时间戳? 即“将仅返回发布时间等于或晚于指定时间戳记的条目。” setPublishedMax()https://developers.google.com/gdata/javadoc/com/google/gdata/client/Query#setPublishedMax (co

  • 我计划使用Google电子表格API从电子表格中获取数据,并使用Sencha Touch在我的移动应用程序中呈现数据。我看过一些解释如何获取和解析数据的博客和教程,但当我尝试同样的方法时,我没有在object中获取列数据作为属性,而是在标记中获取逗号分隔的数据。 举个例子,下面是一个示例电子表格,其中包含更改标题和数据: https://docs.google.com/spreadsheet/cc

  • 问题内容: 我定义了一个,并且具有带有Spring注释的Java类。 我想将Bean 放入我的,因此尝试了以下操作: 但是它总是返回。我怎样才能得到一个Spring bean? 问题答案: 尝试: 你的bean在应用程序上下文中的名称/标识在哪里。甚至更好: 还可以看看GenericFilterBean及其子类。