1

我对使用 Google Docs 还很陌生,但我真的很感激它。脚本很容易完成简单的任务,但我开始意识到一个潜在的速度问题,这有点令人沮丧。

我有一张用于我的业务的表格,用于计算工地上某些材料的成本。它工作得很好,但是在工作之间清除有点乏味,所以我编写了一个简单的脚本来清除我需要清空的范围(由我定义并由名称引用)。

再一次,工作得很好。唯一的问题是清除几个范围(七个)最终需要大约十秒。我相信这是因为在清除每个范围后保存电子表格,这变得很耗时。

我想做的是通过在脚本中禁用自动保存来测试这个理论,然后在清除范围后重新启用它。我不知道这是否可能,因为我还没有在 API 中看到执行此操作的函数,但如果可以,我很想知道。


编辑:这是我正在使用的功能。我已经尝试重写它几次以更简洁和更少的 API 调用密集,但到目前为止,我在减少处理调用所需的时间方面没有任何运气。

function clearSheet() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  sheet.getRange("client").clear();
  sheet.getRange("lm_group_1").clear({contentsOnly:true});
  sheet.getRange("lm_group_2").clear({contentsOnly:true});
  sheet.getRange("dr_group_1").clear({contentsOnly:true});
  sheet.getRange("dr_group_2").clear({contentsOnly:true});
  sheet.getRange("fr_group_1").clear({contentsOnly:true});
  sheet.getRange("fr_group_2").clear({contentsOnly:true});
  sheet.getRange("gr_group_1").clear({contentsOnly:true});
  sheet.getRange("client_name").activate();
}
4

1 回答 1

1

这是不可能的,而且很可能永远不会。这不是 Google Docs 的“本质”。

但是,根据您编写脚本的方式,最终可能所有更改都已经在一次编写完毕。有一些 API 调用可能会强制将您的作品刷新到电子表格中(例如在您写完某些内容后尝试阅读),但我们需要查看您的代码来检查这一点。

无论如何,您始终可以检查电子表格修订历史记录,以验证它是一次完成还是分多个步骤完成。

关于性能,Apps Scripts 有一个不可避免的自然延迟,但不是 10 秒,因此您的脚本可能还有改进的空间,使用更少的 API 调用并更喜欢像setValuesoversetValue等批处理调用。但是话又说回来,我们必须查看您的代码才能断言并提供更多有用的提示。

于 2012-06-08T01:34:33.570 回答