为什么autoResizeColumn()循环会冻结Google Apps脚本?

Why does an autoResizeColumn() loop seem to freeze a Google Apps Script?

本文关键字:Google Apps 脚本 冻结 autoResizeColumn 循环 为什么      更新时间:2023-09-26

我要做的就是调整电子表格中所有列的大小。这是一个独立的电子表格。我使用:

function format() {
  var destination = SpreadsheetApp
    .openByUrl("https://docs.google.com/spreadsheets/d/spreadsheetIdHere/edit#gid=0")
    .getSheetByName("sheetName");
  var columns = destination.getMaxColumns();
  destination.setFrozenRows(1);
  destination.setFrozenColumns(3);
  for (var i = columns; i >= 1; i--) {
    Logger.log(i)
    destination.autoResizeColumn(i);
  }
}

我已经尝试了for (var i = columns; i >= 1; i--)for (var i = 1; i <= columns; i++)只是因为我不知道是什么引起的。我假设一个无限循环,但我完全删除了循环,它仍然运行了很长时间。

日志产生预期的结果,当我注释掉autoResize…大约一秒钟后。带回autoResize…脚本一直运行,甚至不改变任何列。

我试着拿出循环,把一个数字在autoResizeColumn(227)和工作。把循环带回来,我被卡住了。

是autoResizeColums()只是太慢,还是我错过了什么?

如果需要更多的信息请告诉我。

第一部分

从问题:

,脚本就一直运行,甚至不改变任何列。

从平():

电子表格操作有时捆绑在一起以提高性能,例如在多次调用Range.getValue()时。

如果您想在脚本结束之前看到脚本对电子表格所做的更改,您必须添加SpreadshsheetApp.flush()。请记住,但是在循环中添加它在官方文档1中有一个不良实践的例子。

1:最佳实践

<标题> 第2部分

从问题:

是autoResizeColums()只是太慢,还是我错过了什么?

总的来说,调用SpreadsheetApp和其他类似的服务是非常缓慢的。根据我自己的经验,我见过的最慢的调用是9秒,通过使用属性服务

写一个用户属性