使用一个请求创建工作表并更新数据

时间:2016-12-27 14:48:41

标签: java google-sheets google-api google-sheets-api

我想通过一次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)

你是如何解决这个问题的?

2 个答案:

答案 0 :(得分:4)

每个+对象只能在其中设置一个值。您正在设置两个值:

Request

您需要使用两个请求对象,而不是执行上述操作:

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

答案 1 :(得分:3)

@Sam是正确的,但是,如果使用的是JSON表示,请确保在制作的字典中正确设置了格式。我发现以下格式化很有用,可以在使用Google Sheets API的Google Devs的“格式化”单元格中找到 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时遇到了这个问题,发现这是括号所在的简单错误。