调用Sheet API时,获取"此操作会增加工作表中单元格的数量超过2000000单元格的限制"

Ran*_*ani 8 google-spreadsheet-api google-sheets-api

我正在使用Google表格V4 附加API将数据插入到新创建的工作表中.我插入1000行和1001列的数据,即1001000个单元格.

String url = https://sheets.googleapis.com/v4/spreadsheets/<spreadSheetId>/values/<workSheetName>!A1:append?access_token=<accessToken>&valueInputOption=USER_ENTERED&insertDataOption=INSERT_ROWS
    //CREATING THE REQUEST BODY
reqBody.put("range", <workSheetName>+"!A1");
reqBody.put("majorDimension", "ROWS");
reqBody.put("values", <values>);
Run Code Online (Sandbox Code Playgroud)

我收到400 Bad Request消息:"此操作会使工作表中的单元格数量增加到超过2000000个单元格的限制."

我知道谷歌每张纸有200万个单元格限制,但我无法找出为什么我得到这个例外,特别是因为我没有超出限制.

有关为什么会出现此错误的任何帮助?

Wil*_*ell 0

谷歌似乎会计算已经存在的单元格,即使它们是空白的,即使是在全新的电子表格中。解决方案是先擦除这些列。您可以手动选择一列,右键单击,然后选择删除。

使用 API,您需要deleteDimension - 这是一个 PHP 示例:

        new Google_Service_Sheets_Request([
          "deleteDimension" => [
            "range" => [
              "sheetId" => $sheetId,
              "dimension" => "COLUMNS",
              "startIndex" => 1,
              "endIndex" => 26
              ],
          ],
        ]);
Run Code Online (Sandbox Code Playgroud)

笔记:

  • Google 有不寻常的语法来指示范围 - 第一列确实从 0 开始,但结束列必须是您想要的后面的列,因此 0-1 是 A 列,而不是 A 和 B 列。

  • 在此示例中,我们删除除第一列之外的所有列 - 它不会让您删除整个工作表,例如,如果您要执行 0-26(即全部),您会得到:

无效请求[1].deleteDimension:您无法删除工作表上的所有列。

  • 不用担心,虽然您现在只有一个列,但当您添加数据时,将自动添加您需要的任意数量的新列

  • 我在 2019 年 12 月获得的工作簿限制是 5,000,000,而不是 2,000,000:

无效请求[2].pasteData:此操作会将工作簿中的单元格数量增加到超过 5000000 个单元格的限制。