使用一个请求创建 sheet 和更新数据

Create sheet and update data with one request

我想通过一个 api 调用实现 Google 张 api 请求。

我设法实现了这段代码:

List<Request> requests = new ArrayList<>();

        List<CellData> values = new ArrayList<>();

        values.add(new CellData()
            .setUserEnteredValue(new ExtendedValue()
                .setStringValue("Hello World!")));

        requests.add(new Request().setAddSheet(new AddSheetRequest()
            .setProperties(new SheetProperties()
                .setTitle("scstc")))
            .setUpdateCells(new UpdateCellsRequest()
                .setStart(new GridCoordinate()
                    .setSheetId(0)
                    .setRowIndex(0)
                    .setColumnIndex(0))
                .setRows(Arrays.asList(
                    new RowData().setValues(values)))
                .setFields("userEnteredValue,userEnteredFormat.backgroundColor"))
        );

        BatchUpdateSpreadsheetRequest body = new BatchUpdateSpreadsheetRequest().setRequests(requests);

        BatchUpdateSpreadsheetResponse response = service.spreadsheets().batchUpdate(spreadsheetId, body).execute();

但是我得到错误:

400 Bad Request
{
  "code" : 400,
  "errors" : [ {
    "domain" : "global",
    "message" : "Invalid value at 'requests[0]' (oneof), oneof field 'kind' is already set. Cannot set 'updateCells'",
    "reason" : "badRequest"
  } ],
  "message" : "Invalid value at 'requests[0]' (oneof), oneof field 'kind' is already set. Cannot set 'updateCells'",
  "status" : "INVALID_ARGUMENT"
}
    at com.google.sheet.impl.GoogleSheetBasicTest1_____1.hello(GoogleSheetBasicTest1_____1.java:133)

你知道我该如何解决这个问题吗?

每个 Request 对象都应该在其中设置一个值。您正在设置两个值:

requests.add(new Request()
            .setAddSheet(...)
            .setUpdateCells(...));

您需要使用两个请求对象来代替上述操作:

requests.add(new Request().setAddSheet(...));
requests.add(new Request().setUpdateCells(...));

@Sam 是正确的,但是如果您使用 JSON 表示,请确保您在制作的词典中正确设置了格式。我发现以下格式很有用,可以在 Google 开发人员的格式单元格中找到 Google 工作表 API blogpost:

reqs = {'requests': [
    # frozen row 1, request #1
    {'updateSheetProperties': {
        'properties': {'gridProperties': {'frozenRowCount': 1}},
        'fields': 'gridProperties.frozenRowCount',
    }},
    # embolden row 1, request #2
    {'repeatCell': {
        'range': {'endRowIndex': 1},
        'cell': {'userEnteredFormat': {'textFormat': {'bold': True}}},
        'fields': 'userEnteredFormat.textFormat.bold',
    }},
]}

*我不熟悉向该站点添加信息。抱歉,如果这不是他添加信息的最佳方式,但我只是想帮忙。我在使用 python 而不是 java 时遇到了这个问题,发现这是括号 where.

的一个简单错误