“message”:“无效请求[0] .updateCells:尝试写入列:26,超出上一个请求列:25”

时间:2017-10-31 03:22:03

标签: java google-sheets-api

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

更新Google电子表格列标题的代码,日期值为字符串:

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();

错误日志:

    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)

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

2 个答案:

答案 0 :(得分:0)

调试了一下 - 我认为这是用户错误和混合的一个组合。服务器错误。服务器错误是我们似乎在输入大小> 1的情况下给出错误的错误消息。 1,额外的输入超出了网格的边缘。用户错误是您似乎正在将values收集到其生命周期在循环之外的var中,但是在循环中的每个请求中重复使用它,导致后续请求写入超出预期。有两种可能的解决方案:

1)每次循环时创建一个新的values var,而不是将新值附加到先前的&amp;重写它们。

或2)附加到values var,但只生成一个Request,其值是您要编写的每列的组合值。

答案 1 :(得分:0)

你必须使用&#34; appendDimension&#34;来扩展列数。 API。

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

from flask import request

def get(self, address):
    # How do I know what get path was called?
    print(request.full_path)