google-sheets - 如何使用 Google Sheets (v4) API getByDataFilter 返回特定的数据行?
问题描述
我想找到一种使用 Google API 根据我提供的标准检索特定数据行的方法。我在想“getByDataFilter”可能会这样做吗?
我正在编写一个供个人使用的应用程序。我想使用 Google 表格作为我的后端,以便我可以从中合并邮件。在这个阶段,我正在使用 API 资源管理器来查看我可以获得哪些数据。我已经想出了如何使用从一系列单元格中获取数据
获取 https://sheets.googleapis.com/v4/spreadsheets/1keCaROqv4ytDaf5AhcMV13Jj3N_eZCpLfRAGt2ycwA8/values/A%3AL?valueRenderOption=UNFORMATTED_VALUE&fields=values&key={YOUR_API_KEY}
我尝试过使用 getByDataFilter ,但似乎无法返回任何过滤值。
我有以下基本上返回所有内容。
POST https://sheets.googleapis.com/v4/spreadsheets/1keCaROqv4ytDaf5AhcMV13Jj3N_eZCpLfRAGt2ycwA8:getByDataFilter?fields=sheets(data(columnMetadata%2FdeveloperMetadata%2Flocation%2FdimensionRange%2FstartIndex%2CrowData%2Fvalues%2FeffectiveValue%2CstartYOUR__APIRKEYow)& } { “数据过滤器”:[ { “开发者元数据查找”:{ “元数据位置”:{ } } } ] }
我希望能够过滤数据并仅返回与我指定的条件匹配的列。即一个简单的例子是如果我有这样的表
----------------------------------
| Name | Age | Job |
----------------------------------
| Craig | 42 | Teacher |
----------------------------------
| Tim | 23 | Student |
----------------------------------
| Jess | 45 | Accountant |
----------------------------------
我希望能够以某种方式过滤 Tim 的行并返回 ['Tim',23,'Student']
谢谢,
克雷格
解决方案
- 您想从电子表格中检索过滤后的值。
- 您想从外部检索值。
- 您已经能够使用 Sheets API 和访问令牌来请求 API。
如果我的理解是正确的,这个答案怎么样?请认为这只是几个答案之一。
问题:
不幸的是,过滤后的值不能使用电子表格.getByDataFilter 的方法直接检索。当您想使用这个时,请首先输入开发者元数据。然后,您可以使用电子表格.getByDataFilter 的方法检索该值。例如,作为一个测试用例,它想到了以下情况。
- 您问题中的示例值用于这种情况。所以
Tim
放在“A3”的单元格中。 - 使用 batchUpdate 方法使用“createDeveloperMetadata”将开发人员元数据创建到单元格“A3”。
metadataKey
和metadataValue
分别是key1
和value1
。 - 在上述情况下,当请求以下端点时,可以检索到值。
- 端点:
POST https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}:getByDataFilter?fields=sheets%2Fdata%2FrowData%2Fvalues%2FuserEnteredValue
- 请求正文:
{"dataFilters":[{"developerMetadataLookup":{"metadataLocation":{"sheetId":{sheetId}}}}]}
- 当然,也可以使用
metadataKey
和检索值metadataValue
。 - 结果:
{"sheets":[{"data":[{"rowData":[{"values":[{"userEnteredValue":{"stringValue":"Tim"}},{"userEnteredValue":{"numberValue":23}},{"userEnteredValue":{"stringValue":"Student"}}]}]}]}]}
- 端点:
在这种情况下,需要将开发人员元数据设置为单元格。但是从您的问题和回复来看,我认为这种方法可能与您想要的不同。因此,我想提出直接从电子表格中检索过滤值的解决方法。
解决方法:
在此解决方法中,我想建议使用查询语言检索过滤后的值。示例查询如下。
询问:
select * where C='Student'
或者
select * where B<40
在上述情况下,当job
列“C”为Student
时,检索行。在以下情况下,当Age
“B”列小于 40 时,检索行。在您的示例值中,"Tim","23","Student"
从两个查询中检索。
当上述查询由 curl 命令运行时,它变为如下。
卷曲样本:
curl "https://docs.google.com/spreadsheets/d/{spreadsheetId}/gviz/tq?gid={sheetId}&tqx=out:csv&range=A2:C&tq={query}&access_token={accessToken}"
- 在此示例中,CSV 数据作为结果值返回。
- 使用本脚本时,请设置
{spreadsheetId}
,{sheetId}
,{query}
和{accessToken}
. 如果要使用其他情况,也请修改range=A2:C
。- URL 的查询参数的每个值可能都需要进行 URL 编码。请注意这一点。
- 当您使用浏览器访问上述 URL 时,将检索 CSV 数据。
结果:
当为您的问题中的示例值运行上述 curl 示例时,将检索以下值。
"Tim","23","Student"
参考:
推荐阅读
- batch-file - Batch / REG QUERY 获取找到值的路径
- ionic-framework - Alert Controller - css button
- nativescript - 最新 Sidekick 更新导致 VBoxManage 失败退出代码 126
- php - Symfony 4 外部登录检查
- node.js - 节点快递 cookie 未设置
- ruby - Vagrant:Ruby 脚本返回最后创建的文件的名称
- javascript - 如何在 12 小时格式 Ionic 3 上获得预选时间
- spring-boot - Spring Cloud Contract + Pact(Broker):json字符串不能为null或为空
- java - 如何丢弃 JSpinner 的所有 InputMap 键绑定?
- amazon-web-services - 如何为通过 CSV 导入 AWS Neptune 的 Vertex 属性安排单基数?