为什么autoResizeColumn()循环似乎冻结了Google Apps脚本?

时间:2016-10-26 06:40:04

标签: javascript for-loop google-apps-script google-sheets

我尝试做的只是调整电子表格中的所有列。这是一个独立的电子表格。我正在使用:

<fieldset><legend class="Headline">Ship To</legend>
<table style="border:1px solid black;"width="100%"> <%--owais--%>

-----------
----------
--------

</table>
<fieldset>

我已经尝试了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--),因为我不知道导致它的原因。我假设无限循环,但我完全删除了循环,它仍然运行太长时间。

当我注释掉autoResize时,日志会产生预期的结果......大约一秒钟。带回autoResize ...脚本只运行并运行,甚至不会更改任何列。

我尝试取出循环并将一个数字放在for (var i = 1; i <= columns; i++)中并且有效。把回路带回去,我被卡住了。

autoResizeColums()是否太慢,或者我错过了什么?

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

1 个答案:

答案 0 :(得分:0)

第1部分

从问题:

  

并且脚本只是运行并运行,甚至不会更改任何列。

来自flush()

  

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

如果您希望在脚本结束之前查看脚本对电子表格所做的更改,则必须添加SpreadshsheetApp.flush()。请记住,在官方文档 1 中的不良做法示例中提到了将其添加到循环中。

1 Best practices

第2部分

从问题:

  

autoResizeColums()是否太慢,或者我错过了什么?

通常,对SpreadsheetApp和其他类似服务的调用非常缓慢。根据我自己的经验,我看到的最慢的调用是使用Properties Service

编写用户属性的9秒