google-sheets - 如何使用 Google 表格 (v4) API getByDataFilter 返回特定的数据行?

标签 google-sheets google-sheets-api

我想找到一种使用 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}

I have tried playing around with getByDataFilter but cannot seems to return any filtered values.

I have the following which basically returns everything.


    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": {
        }
       }
      }
     ]
    }

I expect to be able to filter the data and only return the columns that match the criteria I specify. i.e. a simple example would be if I had a sheet like this

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

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

谢谢,

克雷格

最佳答案

  • 您想从电子表格中检索过滤后的值。
  • 您想从外部检索值。
  • 您已经能够使用 Sheets API 和请求 API 的访问 token 。

如果我的理解是正确的,这个答案怎么样?请将此视为几个答案之一。

问题:

遗憾的是,无法使用 spreadsheets.getByDataFilter 方法直接检索过滤后的值。当你想使用它时,首先,请放入开发者元数据。然后,您可以使用 spreadsheets.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 示例:

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"

引用:

关于google-sheets - 如何使用 Google 表格 (v4) API getByDataFilter 返回特定的数据行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57719239/

相关文章:

python - 两次调用 GetListFeed 失败 (gdata.spreadsheet.service.SpreadsheetsService())

python - 如何使用 google API for python 在特定文件夹下创建工作表?

google-apps-script - 无法将DeveloperMetadata 添加到行

google-sheets - Google 电子表格中带有 len 的 Countif

google-sheets - 如何获取 google sheet 条件格式自定义公式以引用相关单元格?

time - Google 表格时间格式对我不起作用

google-apps-script - 将 Google 文档评论连同突出显示的文本导出到 Google 表格中?

google-apps-script - 如何请求 updateCells 使多行具有相同的值

javascript - 通过 JS 脚本和 Google Sheets API 抓取图表作为图像?

php - Google 表格 - 设置背景颜色