【问题标题】:Google Scripts functions refreshing rateGoogle Scripts 函数刷新率
【发布时间】:2017-11-06 22:11:47
【问题描述】:

我有一个简单的函数来获取一些单元格值

function getValue() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[4];

  var range = sheet.getRange("C2:C4");

  var cell = range.getCell(1, 1); // "C2"
  if (cell.isBlank()) {
      return 'error'
  } else {
      return cell.getValue()  
  }
}  

但是当我更改C2 中的数据时,包含=getValue() 函数的单元格不会立即自行刷新。只有当我再次运行脚本并返回工作表时。有没有可能加快这个过程?有什么代码吗?谢谢。

【问题讨论】:

  • 我相信当您手动将数据输入到带有公式的单元格中时,您会覆盖公式。我不确定这个函数有什么意义,但如果你想让它工作,你可以考虑使用onEdit() 函数。
  • 是否有理由使用脚本自定义函数=getValue() 而不是=IF(ISBLANK(C2),"error",C2) 之类的东西?
  • 我的回答对您有用吗?如果您对我的回答有疑问,请随时告诉我。我想学习解决你的问题。

标签: google-apps-script google-sheets custom-function


【解决方案1】:

如果您必须在这种情况下使用自定义函数,这个解决方法怎么样?我不知道这是否是最适合你的方式。请将此视为几个答案之一。

脚本流程如下。

流程:

  1. 检索工作表上的所有值和公式。
  2. 删除具有公式的单元格的值。
  3. 使用SpreadsheetApp.flush() 将值反映到工作表。
  4. 将公式导入已删除的单元格。

onEdit(),当您编辑单元格时,将启动此示例脚本。

示例脚本:

function onEdit(e) {
  var range = e.source.getDataRange();
  var data = range.getValues();
  var formulas = range.getFormulas();
  var values = data.map(function(e){return e.slice()});
  for (var i in formulas) {
    for (var j in formulas[i]) {
      if (formulas[i][j]) {
        data[i][j] = formulas[i][j];
        values[i][j] = "";
      }
    }
  }
  range.setValues(values);
  SpreadsheetApp.flush();
  range.setValues(data);
}

注意:

  • 在这种将“C2”处的值导入=getValue() 单元格的情况下,刷新速度比@random-parts 的方法慢。
  • @Cooper 也建议使用onEdit()

如果这对你没有用,我很抱歉。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-11
    相关资源
    最近更新 更多