【问题标题】:Append 1 millions rows and specify cell position using Google Sheets API v4使用 Google Sheets API v4 追加 100 万行并指定单元格位置
【发布时间】:2016-06-15 11:24:55
【问题描述】:

我们使用的是 Google Sheets API V4。我们希望从 v4 开始添加 100 万行,我们支持在电子表格中写入 200 万个单元格。因此,我们尝试添加 80,000 行 6 列。 80,000 * 6 = 480000 个单元格,但出现以下错误。

{
  "code": 400,
  "errors": [
    {
      "domain": "global",
      "message": "Invalid requests[0].appendCells: This action would increase the number of cells in the workbook above the limit of 2000000 cells.",
      "reason": "badRequest"
    }
  ],
  "message": "Invalid requests[0].appendCells: This action would increase the number of cells in the workbook above the limit of 2000000 cells.",
  "status": "INVALID_ARGUMENT"
}

我们在 80 的循环中每次添加 1000 行。错误后我们检查工作表,发现插入了 73000 行。

我们认为 Google Sheets API 也会计算第 6 列之后的空单元格。假设我们用铰孔计算 73000 * 26 (A-Z) = 1898000,当我们尝试添加更多时,我们得到了错误。

请帮助我们提出任何建议如何去除铰孔空单元或任何其他替代方案。我们正在使用以下代码

AppendCellsRequest appendCellReq = new AppendCellsRequest();
appendCellReq.setSheetId(ssDetails.getSheets().get(4).getProperties().getSheetId());
appendCellReq.setRows(listRowData);
appendCellReq.setFields("userEnteredValue");

Request request = new Request();
request.setAppendCells(appendCellReq);

List<Request> requests = new ArrayList<>();
requests.add(request);

BatchUpdateSpreadsheetRequest batchRequests = new BatchUpdateSpreadsheetRequest();

batchRequests.setRequests(requests);

service.spreadsheets().batchUpdate(spreadsheetId, batchRequests).execute();

第二件事,在附加单元格时,我们无法替换单元格的列位置,它总是从第一列(A)开始。

【问题讨论】:

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


    【解决方案1】:

    是的,200 万个单元格的限制适用于所有单元格,无论是否为空白。由于默认情况下工作表有 26 列,这意味着最多可以有 2,000,000/26 = 76923 行,除非列数减少。

    要删除不需要的列(第 6 列之后的),请发送 POST 请求到

    https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}:batchUpdate
    

    请求正文的形式

    {
      "requests": [
        {
          "deleteDimension": {
            "range": {
              "sheetId": sheetId,
              "dimension": "COLUMNS",
              "startIndex": 7,
              "endIndex": 26
            }
          }
        }
      ]
    }
    

    参考:delete rows or columns

    【讨论】:

    • 谢谢@soup,在上述情况下,我们有固定的列。假设工作表中已经有 14 列,总列数为 26。现在我们添加 6 列。那么如何识别空列并将其删除。如果您有解决方案,请帮助我们。
    • 我不明白您所说的“已经有 14 列,总列数为 26”是什么意思。是14还是26?无论如何,在 v4 中确定最后一列数据的唯一方法似乎是从工作表中请求所有值并处理它们,寻找非空值。见stackoverflow.com/a/37687676
    • 我说的是14个填充数据,12个是空的。那么我们如何识别它是空的呢?哦,我们有 80,000 多行处理它并找到最后一列将花费很多时间。有没有其他选择?就像假设我们添加了包含没有空行/列的列的行。
    猜你喜欢
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多