收到错误“此操作会将工作表中的单元格数量增加到超过限制”(包含 50,000 个单元格)

问题描述 投票:0回答:4

我正在尝试使用脚本编辑器将从 URL 下载的 CSV 放入新的空 Google 工作表中。

 var raw = UrlFetchApp.fetch(final_url, options).getContentText();
 var data = Utilities.parseCsv(raw, "|");
 Logger.log(data[0].length); /// 17 (columns)
 Logger.log(data.length); /// 2849 (rows)

 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getActiveSheet();
 sheet.getRange(1, 1, data.length, data[0].length).setValues(data);

据我了解,我总共有 48433 个单元格,但是当我尝试将其写入工作表时,出现错误:

此操作会将工作簿中的单元格数量增加到超过 5000000 个单元格的限制。

有什么想法吗?

google-apps-script google-sheets google-sheets-api
4个回答
4
投票

在没有看到实际工作表和 CSV 文件的情况下,我们只能推测问题所在。我最好的猜测是您没有考虑到 5,000,000 个单元格的限制适用于整个“工作簿”。因此,如果您有多个选项卡(工作表),那么这些工作表中使用的单元格总和不能超过 5,000,000 个单元格。


2
投票

问题:

工作表中的单元格不足以容纳

setValues
数据。并且
setValues()
错误地抛出了错误

此操作会将工作簿中的单元格数量增加到超过 5000000 个单元格的限制。

这可能是由于 csv 文件的内容(以及由此产生的数组数据)造成的。在测试过程中,我能够将 2800 行 x 17 列数据添加到 1000 行 x 26 列的工作表中,没有出现任何问题。

解决方案:

  • 手动增加工作表中的行/列数或

  • 在调用 setValues

     之前尝试使用 
    sheet#insertRows

    插入行

片段:

sheet.insertRows(sheet.getLastRow(), data.length);

0
投票

我建议使用 pygsheets 库。 Google 表格将计为对象行和列,甚至是空白行和列。因此,我要做的第一件事是删除空白行并删除未使用的列,然后重试该过程。 deleting sheets rows

之后,您应该能够插入一些数据(先尝试几行)。之后,尝试构建一个函数或使用库在所有插入后调整工作表的大小,或尝试使用新数据更新行。

如果使用Python:

Pygsheets 具有向电子表格插入、更新或附加数据的方法pygsheets 文档。如果您使用append方法,请记住添加“overwrite=True”,这将防止每次在数据后面创建空行。如果您使用更新方法,那就没问题,如果您出于任何原因想要使用插入方法,我建议您毕竟使用调整大小方法来根据您的数据修剪电子表格并防止再次出现此错误。

如果对 pygsheets 的使用有任何疑问,没有什么比文档更好的了,但是此链接也可以为您提供帮助。


0
投票

老问题,经常出现。我将解释我遇到的错误,我很确定它与此相符。为了让大家开心,故事如下: 我有一个包含员工 ID 的 CSV,由 3 个字母组成,例如 SRA、JPO、WKU 等...在我的工作表中,我有包含这些 ID 的选项卡。 所以基本上我读取了 CSV,根据 ID 对数据进行分组,然后将其注入相应的选项卡中。

但有时多名员工的姓名首字母相同,为了区分他们,需要添加一个额外的数字。所以我们有 JMA5 或 SPO2 等 id。 我进行了注射,然后出现了谷歌错误,表明我超过了一百万个细胞!

我查看我的选项卡,发现名称中包含数字的选项卡未填写。然后,当我打开 SRA 选项卡时,我发现已添加了数千列!当我滚动时,我到达 JMA 列和第 5 行,我看到了应该进入我的 JMA5 选项卡的数据!由于 Google 表格将空单元格和满单元格都算作单元格,并且具有尽可能多的列,事实上,我达到了极限...... 具体来说,如果我阅读 SRA 选项卡,然后将 JMP5 作为“范围”进行插入,则插入是在 SRA!JMA5 上完成的,它会添加列。 Google 文档中“非常谨慎”地解释了该解决方案:当选项卡的名称包含空格或字母数字字符时,必须用单引号将它们引起来。 所以

$range = "JMA5"; 

不起作用,因为它将注入最后使用的选项卡,位于 JMA5 位置(JMA 列,第 5 行)。为了让它真正注入 JMA5 选项卡(附加值),您必须编写

$id = "JMA5";
$range = "'".$id."'";

当您指示单元格时,这是相同的:“JMA5”!例如 A1。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.