【问题标题】:Google Sheets: Custom function with dynamic changeGoogle 表格:具有动态变化的自定义功能
【发布时间】:2021-01-16 22:17:37
【问题描述】:

我正在使用一个自定义函数来跟踪单元格的颜色是什么。但是有一个问题是,如果单元格颜色发生变化,此函数不会自行更新

单元格颜色:

function GetCellColorCode(input) 
{ 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var cell = ss.getRange(input); 
var result = cell.getBackground(); 
return result 
}

接下来,我找到并添加了一个脚本,用于重新计算表格中的所有公式,以便它们自行更新。我添加了 trigger,以便该公式每小时运行一次。

function refresh() {SpreadsheetApp.flush()}

但我的表格有 17 页数千 个公式。结果,所有内容的更新速度都比我想要的要

我的问题是:我可以在自定义公式中添加一些东西,使它像常规的谷歌表格公式一样工作并更改立即如果细胞发生变化?

【问题讨论】:

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


    【解决方案1】:

    我相信你的目标如下。

    • 当单元格的背景颜色改变时,您想刷新自定义函数。

    修改点:

    • 当单元格的背景颜色发生变化时,可以通过 OnChange 触发器检测到。我认为这可能可以用于实现您的目标。

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

      1. 首先,作为示例,将=GetCellColorCode("A1") 的自定义公式放在“B1”单元格中。
      2. 当单元格“A1”的背景颜色发生变化时,OnChange 触发器会运行一个函数。
      3. 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 的自定义公式。

    2。将 OnChange 触发器安装到 onChange 函数。

    请将 OnChange 触发器安装到onChange 的函数中。 Ref

    3。设置自定义公式。

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

    4。测试脚本。

    请更改“A1”的背景颜色。由此,onChange 的函数由 OnChange 触发器运行。并且,自定义函数被刷新,然后单元格“B1”的值被改变。

    作为演示,使用上述流程时,得到如下结果。

    注意:

    • 在此示例中,假设您的自定义函数的函数名称为GetCellColorCode。所以当你修改它时,请同时修改上面的示例脚本。请注意这一点。

    参考资料:

    【讨论】:

      【解决方案2】:

      我的猜测是您不能在自定义函数中使用 SpreadsheetApp.flush() 阅读指南here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-24
        相关资源
        最近更新 更多