繁体   English   中英

如何使用Google Sheets(v4)API getByDataFilter返回特定的数据行?

[英]How can I use the Google Sheets (v4) API getByDataFilter to return a specific row of data?

我想找到一种使用Google API根据我提供的条件检索特定数据行的方法。 我在想“ getByDataFilter”可以做到这一点吗?

我正在编写供个人使用的应用程序。 我想将Google表格用作后端,以便可以从中进行邮件合并。 在此阶段,我正在使用API​​资源管理器来查看可以获取的数据。 我已经弄清楚了如何使用

GET 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%2CstartColumn%2CstartRow))&key={YOUR_API_KEY}

    {
     "dataFilters": [
      {
       "developerMetadataLookup": {
        "metadataLocation": {
        }
       }
      }
     ]
    }

我希望能够过滤数据并仅返回与我指定的条件匹配的列。 即一个简单的例子是,如果我有一个这样的表

----------------------------------
| Name  | Age   | Job            |
----------------------------------
| Craig | 42    | Teacher        |
----------------------------------
| Tim   | 23    | Student        |
----------------------------------
| Jess  | 45    | Accountant     |
----------------------------------

我希望能够以某种方式过滤Tim的行并返回['Tim',23,'Student']

谢谢,

克雷格

  • 您要从电子表格中检索过滤后的值。
  • 您要从外部检索值。
  • 您已经可以使用Sheets API和访问令牌来请求API。

如果我的理解是正确的,那么这个答案呢? 请认为这只是几个答案之一。

问题:

不幸的是,使用电子表格.getByDataFilter的方法无法直接检索过滤后的值。 如果要使用此功能,请首先放置开发人员元数据。 然后,您可以使用sheets.getByDataFilter方法检索该值。 例如,作为测试用例,它考虑了以下情况。

  • 您问题中的样本值用于这种情况。 因此, Tim被放在“ A3”单元格中。
  • 使用batchUpdate方法使用“ createDeveloperMetadata”将开发人员元数据创建到单元格“ A3”。 metadataKeymetadataValue分别是key1value1
  • 在上述情况下,当请求以下端点时,可以检索这些值。
    • 端点: POST https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}:getByDataFilter?fields=sheets%2Fdata%2FrowData%2Fvalues%2FuserEnteredValue
    • 请求正文: {"dataFilters":[{"developerMetadataLookup":{"metadataLocation":{"sheetId":{sheetId}}}}]}
    • 当然,还可以使用metadataKeymetadataValue检索值。
    • 结果: {"sheets":[{"data":[{"rowData":[{"values":[{"userEnteredValue":{"stringValue":"Tim"}},{"userEnteredValue":{"numberValue":23}},{"userEnteredValue":{"stringValue":"Student"}}]}]}]}]}

在这种情况下,需要将开发人员元数据设置为单元。 但是从您的问题和答复中,我认为此方法可能与您想要的方法有所不同。 因此,我想提出一种解决方法,用于直接从电子表格中检索过滤后的值。

解决方法:

在这种解决方法中,我想建议使用查询语言来检索过滤后的值。 示例查询如下。

查询:

select * where C='Student'

要么

select * where B<40

在上述情况下,当列“ C”的jobStudent ,将检索行。 在以下情况下,当“ B”列的Age小于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"

参考:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM