【问题标题】:Translate JSON request to Java Google sheet API V4将 JSON 请求转换为 Java Google sheet API V4
【发布时间】:2017-11-16 11:59:33
【问题描述】:

在谷歌表格API guide

我读到find 请求(查找值为“X”的单元格)可以在 JSON 中格式化如下:

{
  "find": string,
  "replacement": string,
  "matchCase": boolean,
  "matchEntireCell": boolean,
  "searchByRegex": boolean,
  "includeFormulas": boolean,

  // Union field scope can be only one of the following:
  "range": {
    object(GridRange)
  },
  "sheetId": number,
  "allSheets": boolean,
  // End of list of possible types for union field scope.
}

可以通过此 URL 的形式提出请求 https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId .......

但我无法将其翻译成 JAVA 代码

我在其中一个论坛中找到的最接近的代码是:

    requests.add(new Request().setFindReplace(new FindReplaceRequest().setFind(entry.getKey())
            .setMatchEntireCell(true)
            .setMatchCase(true)
            .setReplacement(entry.getValue())
            .setRange(new GridRange()
                    .setSheetId(0)
                    .setStartRowIndex(row)
                    .setEndRowIndex(row + 1))));
}



String cellReq = (new FindReplaceRequest().setFind("samuel")).getFind();

缺少我期望从 API 获得的响应,让我知道工作表中的哪个单元格具有我要查找的值。

谢谢

【问题讨论】:

  • 你可以发送一个标准的http请求,带有api键和json字符串到url,然后得到答案。 JAVA与它有什么关系?你想知道如何用 JAVA 发送 http 请求吗?
  • 感谢 Peter 的回答,我只想保持一致,并继续使用 Google 的库(Google API 客户端、Oauth 客户端和 API 服务表),它负责身份验证和 http 请求以及许多其他功能。我看到谷歌有一个 FindReplaceRequest() ,但没有足够的记录让我遵循。
  • 但是你的问题很模糊。我真的不明白是什么问题。您不能“将 JSON 转换为 JAVA”。 JSON 是数据交换语言,与 XML 相同。 JAVA是一种编程语言。您可以使用 JAVA 通过一些 API 发送 JSON 结构化数据以获得答案。另外,我不明白您要达到的目标-在我看来,您只需要 google 表格中具有您正在搜索的值的单元格地址。对吗?
  • 你说得对,我没有选择最好的标题。这是对 google sheet api { "range":" Sheet1!a2:a6 " "values": [ [ " Book " ] [ " Cat " ] [ " House " ] [ " Tree " ] ] } 的 JSON 请求的一部分。该请求基本上定义了 Google 工作表中要更新的一系列单元格,以及要插入这些单元格的值。是的,我可以创建一个客户端,但是我使用的是 google 的库,所以上面的 JSON 将作为..... 包含在代码中

标签: java android python json google-sheets-api


【解决方案1】:

您似乎只是部分复制了本页指南中的示例:https://developers.google.com/sheets/api/guides/batchupdate#example

您需要将 FindReplaceRequest 放在 BatchUpdateSpreadsheetRequest 中(在 requests 字段中)并在 Spreadsheets.BatchUpdate 调用中发送。

完整的例子是:

List<Request> requests = new ArrayList<>();
// Change the spreadsheet's title.
requests.add(new Request()
        .setUpdateSpreadsheetProperties(new UpdateSpreadsheetPropertiesRequest()
                .setProperties(new SpreadsheetProperties()
                        .setTitle(title))
                .setFields("title")));
// Find and replace text.
requests.add(new Request()
        .setFindReplace(new FindReplaceRequest()
                .setFind(find)
                .setReplacement(replacement)
                .setAllSheets(true)));
// Add additional requests (operations) ...

BatchUpdateSpreadsheetRequest body =
        new BatchUpdateSpreadsheetRequest().setRequests(requests);
BatchUpdateSpreadsheetResponse response =
        service.spreadsheets().batchUpdate(spreadsheetId, body).execute();
FindReplaceResponse findReplaceResponse = response.getReplies().get(1).getFindReplace();
System.out.printf("%d replacements made.", findReplaceResponse.getOccurrencesChanged());

【讨论】:

  • 再看一遍,.setProperties(new SpreadsheetProperties() .setTitle(title)) .setFields("title"))); 不是要替换此处的磁贴指的是电子表格标题而不是电子表格中的特定单元格吗?
  • 哦,对不起,我误读了您的问题,因为您的问题是在给定 JSON 的情况下询问如何在 Java 中执行 FindReplace,因为这就是您的示例。 Sheets API 本身不提供“查找”选项,这就是为什么您不知道该怎么做。
  • (setProperties 部分只是示例中的代码,告诉您如何使用 BatchUpdateSpreadsheet 更新电子表格。与您的目标无关,但可用作如何进行 API 调用的一般指南。 )
  • 不用担心,那里没有太多文档,但是由于我的问题开头的 JSON sn-p(查找和替换请求),我相信 API 支持 find,并且因为库中有一个FindReplaceRequest() java 类,我的印象是可能有一些Java 代码可以允许查找/替换。不过,我很感谢你看一看。
  • API 不一定要支持您认为的术语中的查找。它可以很容易地替换给定范围内的所有字符串值,而无需定位单个单元格。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-29
  • 2020-09-04
  • 1970-01-01
相关资源
最近更新 更多