"message" : "无效的请求 [0].updateCells: 尝试写入列:26,超出最后请求的列:25"

roa*_*r10 1 java google-sheets-api

使用 Google Sheets API v4 更新 Google 电子表格上的 30 列时出现此错误。

使用日期值作为字符串更新谷歌电子表格列标题的代码:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy MMM dd");

Calendar calendar = new GregorianCalendar(2017, 10, 01);

// # of days
for (int i = 0; i < 30; i++) {
    String varDate = sdf.format(calendar.getTime());
    System.out.println("Date : " + varDate);
    calendar.add(Calendar.DAY_OF_MONTH, 1);

    values.add(new CellData().setUserEnteredValue(new ExtendedValue().setStringValue(varDate)));

    requests.add(new Request().setUpdateCells(new UpdateCellsRequest()
        .setStart(new GridCoordinate().setSheetId(0).setRowIndex(0).setColumnIndex(i))
        .setRows(Arrays.asList(new RowData().setValues(values))).setFields("*")));

}

BatchUpdateSpreadsheetRequest batchUpdateRequest = new BatchUpdateSpreadsheetRequest().setRequests(requests);
service.spreadsheets().batchUpdate(spreadsheetID, batchUpdateRequest).execute();
Run Code Online (Sandbox Code Playgroud)

错误日志:

    com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request
{
  "code" : 400,
  "errors" : [ {
    "domain" : "global",
    "message" : "Invalid requests[0].updateCells: Attempting to write column: 26, beyond the last requested column of: 25",
    "reason" : "badRequest"
  } ],
  "message" : "Invalid requests[0].updateCells: Attempting to write column: 26, beyond the last requested column of: 25",
  "status" : "INVALID_ARGUMENT"
}
    at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:146)
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:321)
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1065)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
    at main.java.Quickstart.fillRowAndColumnHeadings(Quickstart.java:143)
    at main.java.Main.main(Main.java:15)
Run Code Online (Sandbox Code Playgroud)

我不确定是否为 Google 表格设置了任何默认列数,如果是,我该如何覆盖默认值?基本上我想创建一个谷歌电子表格,列作为一个月的日期(在上面的例子中,11 月的日期),行作为小时时间戳。这个问题的任何输入/指针?提前致谢。

小智 5

您必须使用“appendDimension”API 扩展列数。

请参阅此处的文档(https://developers.google.com/sheets/api/samples/rowcolumn#append_empty_rows_or_columns

Request request = new Request();
AppendDimensionRequest appendRequest = new AppendDimensionRequest();
appendRequest .setDimension("COLUMNS");
appendRequest .setLength(50);
request .setAppendDimension(appendRequest );

BatchUpdateSpreadsheetRequest request = new  BatchUpdateSpreadsheetRequest().setRequests(Arrays.asList((request ));
    BatchUpdateSpreadsheetResponse response =  sheetsService.spreadsheets()
            .batchUpdate(sheetId, request)
            .execute();
Run Code Online (Sandbox Code Playgroud)