Google Scripts功能刷新率

时间:2017-11-06 22:11:47

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

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

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()函数的单元格不会立即刷新。只有我再次运行脚本并返回工作表。是否有可能加快这一进程?任何代码?感谢。

1 个答案:

答案 0 :(得分:0)

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

脚本流程如下。

流程:

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

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