【问题标题】:Query a google spread sheet with google query language in gspread在 gspread 中使用谷歌查询语言查询谷歌电子表格
【发布时间】:2021-07-09 07:02:42
【问题描述】:

是否可以在 gspread API 中使用Google Query Language 对电子表格执行查询?如果我们可以使用this API 调用来执行这些查询,我正在徘徊。

【问题讨论】:

  • gspread 是 Sheets API 的库,而您引用的 Visualization API 是完全不同的 API,因此不能同时执行。但是,如果您提供有关您想要完成的任务的更多详细信息,也许可以找到解决方案。
  • 我想按照谷歌查询语言站点中的描述执行查询。例如select A where B>=5000
  • 我更熟悉 Sheets API 中的过滤,但是与首先构建过滤器,然后设置过滤器,然后获取所有行,然后清除相比,这种方法更有效且更容易执行基本过滤器。
  • 有没有类似的可视化库?例如。 gspread 是用于工作表 API,可视化 api 有什么类似的吗?
  • 取决于您的意思,execute queries 您的意思是在脚本中检索查询结果?此外,gspread 不是 Sheets API 的官方 Python 库,here 您可以查看正在使用的官方库的示例以及库文档。

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


【解决方案1】:

我相信你的目标如下。

  • 您想使用查询语言检索值。
  • 您有一个使用 gspread 的脚本,并且希望使用该脚本来实现。

修改点:

  • 很遗憾,在现阶段,Query 语言无法直接与 Sheets API 一起使用。您的问题的 cmets 中已经提到了这一点。
  • 但是,当使用requests 库时,可以使用查询语言。
    • 此线程的“示例脚本 3”适用于 Google Apps 脚本。 Ref使用这个方法,我觉得用python可以达到你的目的。并且,使用gspread的授权脚本也可以用于此方法。

当以上几点反映到脚本中时,它变成如下。

示例脚本:

在这种情况下,访问令牌是从 credentialsclient = gspread.authorize(credentials) 检索的,用于使用 gspread。

client = gspread.authorize(credentials) # Here, please use your authorization script for using gspread.

spreadsheetId = '###' # Please set the Spreadsheet ID.
sheetName = 'Sheet1' # Please set the sheet name.

query = 'select A where B>=5000' # This is from your sample query.
url = 'https://docs.google.com/spreadsheets/d/' + spreadsheetId + '/gviz/tq?sheet=' + sheetName + '&tqx=out:csv&tq=' + urllib.parse.quote(query)
res = requests.get(url, headers={'Authorization': 'Bearer ' + credentials.access_token})
print(res.text)
  • 在此脚本中,还使用了import urllib.parseimport requests
  • 当您想使用工作表ID而不是工作表名称时,请将url = 'https://docs.google.com/spreadsheets/d/' + spreadsheetId + '/gviz/tq?sheet=' + sheetName + '&tqx=out:csv&tq=' + urllib.parse.quote(query)修改为url = 'https://docs.google.com/spreadsheets/d/' + spreadsheetId + '/gviz/tq?gid=' + sheetId + '&tqx=out:csv&tq=' + urllib.parse.quote(query)
  • 在这种情况下,似乎可以使用 Sheets API 和 Drive API 的范围。

注意:

  • 以上示例脚本将数据作为 CSV 数据返回。
  • 例如,当电子表格公开共享时,不需要使用访问令牌。因此,在这种情况下,您可以使用 res = requests.get(url) 检索数据。

参考资料:

【讨论】:

  • 谢谢。我有点意识到这种方法,但这清楚地表明现在 gspread 与此任务无关或使用查询语言
  • @Ruchit Vithani 感谢您的回复。是的。在这种情况下,使用 gspread 的授权脚本来检索访问令牌。当电子表格被公开共享时,不需要使用访问令牌。在这种情况下,也不需要使用授权脚本。
猜你喜欢
  • 2016-05-18
  • 1970-01-01
  • 2019-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多