【问题标题】:Google Script runs slow谷歌脚本运行缓慢
【发布时间】:2020-05-05 04:01:02
【问题描述】:

所以我有一张表,我在其中添加了一个自定义菜单(我在 google 中搜索并找到了该菜单)。

自定义菜单显示一个对话框(见下图)它返回我在特定单元格中的所有数据验证,每个单元格都有一个复选框,因此我可以选择多个选项并将其返回到单个单元格中。

see image here

但是 FILL CURRENT CELL 按钮运行缓慢!

我这里有这组代码:

代码.gs

   function onOpen() {
  SpreadsheetApp.getUi()
  .createMenu('Custom Menu')
  .addItem('Show Dialog', 'showDialog')
  .addToUi();
}
function showDialog() {
  var html = HtmlService.createTemplateFromFile('page').evaluate();
  SpreadsheetApp.getUi()
  .showSidebar(html);
}
var valid = function(){
  try{
    return SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/1Bw-CW5JZX-MEjPKhrWSNA2zWkqJTR6W3yM2yDrqjE_0/edit#gid=0').getRange('B1').getDataValidation().getCriteriaValues()[0].getValues();
  }catch(e){
    return null
  }
}
function fillCell(e){
  var s = [];
  for(var i in e){
    if(i.substr(0, 2) == 'ch') s.push(e[i]);
  }
  if(s.length) SpreadsheetApp.getActiveRange().setValue(s.join(', '));
}

page.html

    <div style="font-family: arial;">
<? var data = valid(); ?>
<form id="form" name="form">
<? if(Object.prototype.toString.call(data) === '[object Array]') { ?>
<? for (var i = 0; i < data.length; i++) { ?>
<? for (var j = 0; j < data[i].length; j++) { ?>
<input type="checkbox" id="ch<?= '' + i + j ?>" name="ch<?= '' + i + j ?>" value="<?= data[i][j] ?>"><?= data[i][j] ?><br>
<? } ?>
<? } ?>
<? } else { ?>
<p>Maybe current cell doesn't have <a href="https://support.google.com/drive/answer/139705?hl=en">Data validation...</a></p>
<? } ?>
<br>
<br>


<input type="button" value="Fill Current Cell" onclick="google.script.run.fillCell(this.parentNode)" />
<input type="button" value="Clear Selections" onclick="reset()" />
</form>
</div>

有人可以帮我让FILL CURRENT CELL按钮运行得更快吗?

【问题讨论】:

  • 当“for in”改为其他循环方式时,可以稍微降低处理成本。 Ref 但我无法理解您认为的 slowfaster。那我能问一下你觉得slowfaster的细节吗?
  • 正如@Tanaike 所说,请考虑指定慢和快的含义。尽管考虑到使用客户端-服务器交互(google.script.run)的延迟是预期的。它在编辑器中运行得更快吗?你的代码看起来不错,所以我不知道你的问题是什么。
  • 很抱歉。所选项目进入单元格之前大约需要 3-5 秒。正常吗?我认为它会像直接在单元格上写公式一样快。..
  • 感谢您的回复。我认为在您的情况下,google.script.run 的成本造成的影响很大。这样,即使使用公式,当运行google.script.run 时,也会产生这样的成本。
  • 所以我想我只需要习惯它。谢谢!

标签: google-apps-script google-sheets spreadsheet


【解决方案1】:

只是为了留下答案:

考虑到google.script.run每次调用都需要与服务器交互,因此与直接从编辑器运行相同的功能相比,您会遇到一些性能问题。

因此,如果您像在 cmets 中所说的那样遇到很小的时差,请不要担心,因为这只是正常行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    相关资源
    最近更新 更多