Google 表格:具有动态变化的自定义函数
Google Sheets: Custom function with dynamic change
我正在使用一个自定义函数来跟踪单元格的颜色。但是有一个问题,如果单元格颜色改变,这个函数不会自动更新。
单元格颜色:
function GetCellColorCode(input)
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var cell = ss.getRange(input);
var result = cell.getBackground();
return result
}
接下来,我找到并添加了一个 脚本,该脚本重新计算 table 中的所有公式 ,以便它们自行更新。我添加了 trigger 以便此公式每小时运行 。
function refresh() {SpreadsheetApp.flush()}
但是我的table有17页和数千的公式。结果,所有内容的更新都比我希望的慢。
我的问题是: 我可以向 自定义公式 添加一些内容,使其像 常规 google 工作表公式 并立即 如果单元格发生变化?
我的猜测是您不能在自定义函数中使用 SpreadsheetApp.flush(),请阅读指南 here。
我相信你的目标如下。
- 您想在单元格背景颜色更改时刷新自定义函数。
修改点:
当单元格的背景颜色改变时,OnChange触发器可以检测到。我认为这可能可以用于实现您的目标。
为了达到你的目的,我提出以下流程。
- 首先,作为示例,
=GetCellColorCode("A1")
的自定义公式放在“B1”单元格中。
- 当单元格“A1”的背景颜色改变时,一个函数是运行由OnChange触发。
- 函数 运行 由 OnChange 触发器刷新刷新
GetCellColorCode
的自定义函数。
- 在本例中,使用了 TextFinder。
通过这个流程,可以刷新GetCellColorCode
的自定义函数
用法:
要使用此方法,请按照以下流程进行。
1。准备脚本。
请将以下脚本复制粘贴到Spreadsheet的脚本编辑器中并保存。
// 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
}
- 本例中,背景单元格改变的活动sheet中
GetCellColorCode
的自定义公式被刷新
2。将 OnChange 触发器安装到 onChange
函数。
请为onChange
的函数安装OnChange触发器。 Ref
3。设置自定义公式。
请将=GetCellColorCode("A1")
的自定义公式放入单元格“B1”。在这种情况下,当单元格“A1”具有默认背景色时,自定义函数中的单元格“B1”中显示 #ffffff
。
4。测试脚本。
请更改“A1”的背景颜色。至此,onChange
的功能被OnChange触发器运行。并且,刷新自定义函数,然后更改单元格“B1”的值。
作为演示,当使用上面的流程时,得到如下结果。
注:
- 在此示例中,假设您的自定义函数的函数名称是
GetCellColorCode
。所以当你修改它时,请同时修改上面的示例脚本。请注意这一点。
参考文献:
我正在使用一个自定义函数来跟踪单元格的颜色。但是有一个问题,如果单元格颜色改变,这个函数不会自动更新。
单元格颜色:
function GetCellColorCode(input)
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var cell = ss.getRange(input);
var result = cell.getBackground();
return result
}
接下来,我找到并添加了一个 脚本,该脚本重新计算 table 中的所有公式 ,以便它们自行更新。我添加了 trigger 以便此公式每小时运行 。
function refresh() {SpreadsheetApp.flush()}
但是我的table有17页和数千的公式。结果,所有内容的更新都比我希望的慢。
我的问题是: 我可以向 自定义公式 添加一些内容,使其像 常规 google 工作表公式 并立即 如果单元格发生变化?
我的猜测是您不能在自定义函数中使用 SpreadsheetApp.flush(),请阅读指南 here。
我相信你的目标如下。
- 您想在单元格背景颜色更改时刷新自定义函数。
修改点:
当单元格的背景颜色改变时,OnChange触发器可以检测到。我认为这可能可以用于实现您的目标。
为了达到你的目的,我提出以下流程。
- 首先,作为示例,
=GetCellColorCode("A1")
的自定义公式放在“B1”单元格中。 - 当单元格“A1”的背景颜色改变时,一个函数是运行由OnChange触发。
- 函数 运行 由 OnChange 触发器刷新刷新
GetCellColorCode
的自定义函数。- 在本例中,使用了 TextFinder。
- 首先,作为示例,
通过这个流程,可以刷新GetCellColorCode
的自定义函数
用法:
要使用此方法,请按照以下流程进行。
1。准备脚本。
请将以下脚本复制粘贴到Spreadsheet的脚本编辑器中并保存。
// 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
}
- 本例中,背景单元格改变的活动sheet中
GetCellColorCode
的自定义公式被刷新
2。将 OnChange 触发器安装到 onChange
函数。
请为onChange
的函数安装OnChange触发器。 Ref
3。设置自定义公式。
请将=GetCellColorCode("A1")
的自定义公式放入单元格“B1”。在这种情况下,当单元格“A1”具有默认背景色时,自定义函数中的单元格“B1”中显示 #ffffff
。
4。测试脚本。
请更改“A1”的背景颜色。至此,onChange
的功能被OnChange触发器运行。并且,刷新自定义函数,然后更改单元格“B1”的值。
作为演示,当使用上面的流程时,得到如下结果。
注:
- 在此示例中,假设您的自定义函数的函数名称是
GetCellColorCode
。所以当你修改它时,请同时修改上面的示例脚本。请注意这一点。