Google apps script GoogleSheets:具有动态更改的自定义功能

Google apps script GoogleSheets:具有动态更改的自定义功能,google-apps-script,google-sheets,google-sheets-formula,custom-function,Google Apps Script,Google Sheets,Google Sheets Formula,Custom Function,我正在使用一个自定义函数,它跟踪单元格的颜色。但存在一个问题,即如果单元格颜色发生变化,此函数本身不会更新 单元格颜色: function GetCellColorCode(input) { var ss = SpreadsheetApp.getActiveSpreadsheet(); var cell = ss.getRange(input); var result = cell.getBackground(); return result } 接下来,我找到并添加了一个脚本,该

我正在使用一个自定义函数,它跟踪单元格的颜色。但存在一个问题,即如果单元格颜色发生变化,此函数本身不会更新

单元格颜色:

function GetCellColorCode(input) 
{ 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var cell = ss.getRange(input); 
var result = cell.getBackground(); 
return result 
}
接下来,我找到并添加了一个脚本,该脚本重新计算表中的所有公式,以便它们自己更新。我添加了触发器,这样这个公式每小时运行一次。

function refresh() {SpreadsheetApp.flush()}
但是我的表格有17页和数千页公式。因此,所有内容的更新速度都比我希望的要慢得多


我的问题是:我能给一个自定义公式添加一些东西吗,这样它就可以像一个普通的谷歌表单公式一样工作,如果单元格发生变化,它会立即发生变化吗?

我猜你不能使用SpreadsheetApp.flush()在自定义函数中阅读指南。

我相信您的目标如下

  • 当单元格的背景颜色更改时,您希望刷新自定义函数
修改点:
  • 当单元格的背景颜色改变时,OnChange触发器可以检测到这一点。我想这也许可以用来实现你的目标

  • 为了实现您的目标,我想提出以下流程

  • 首先,作为示例,将自定义公式
    =GetCellColorCode(“A1”)
    放在单元格“B1”中
  • 当单元格“A1”的背景颜色更改时,OnChange触发器将运行一个函数
  • OnChange触发器运行的函数刷新
    GetCellColorCode
    的自定义函数。
    • 在这种情况下,使用TextFinder
通过此流程,可以刷新
GetCellColorCode
的自定义函数

用法: 为了使用此方法,请执行以下流程

1.准备脚本。 请将以下脚本复制粘贴到电子表格的脚本编辑器并保存

// I added this script.
function onChange(e) {
  if (e.changeType == "FORMAT") {
    var formula = "=GetCellColorCode";
    var tempFormula = "=sample";
    var sheet = e.source.getActiveSheet();
    sheet.createTextFinder(`^\\${formula}`).matchFormulaText(true).useRegularExpression(true).replaceAllWith(tempFormula);
    sheet.createTextFinder(`^\\${tempFormula}`).matchFormulaText(true).useRegularExpression(true).replaceAllWith(formula);
  }
}

// This is your script.
function GetCellColorCode(input) { 
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var cell = ss.getRange(input); 
  var result = cell.getBackground(); 
  return result 
}
  • 在本示例中,背景单元格已更改的活动工作表中
    GetCellColorCode
    的cusrom公式被刷新
2.将OnChange触发器安装到
OnChange
功能。 请将OnChange触发器安装到
OnChange
的功能中

3.设置自定义公式。 请将自定义公式
=GetCellColorCode(“A1”)
放入单元格“B1”中。在这种情况下,当单元格“A1”具有默认背景色时,自定义函数中的单元格“B1”中会显示
#ffffff

4.测试脚本。 请更改“A1”的背景色。这样,
onChange
的功能由onChange触发器运行。并且,刷新自定义函数,然后更改单元格“B1”的值

作为演示,当使用上述流量时,可获得以下结果

注:
  • 在本示例中,它假定自定义函数的函数名为
    GetCellColorCode
    。所以当您修改它时,请同时修改上面的示例脚本。请小心这个
参考资料: