【发布时间】:2018-12-04 23:00:22
【问题描述】:
我正在尝试找到一种方法将 B3 中使用的公式(目前是一个简单的 AVERAGE 公式)调用到 G3 中并在那里使用它。绿色单元格是用于测试的静态值。如果我在 G3 中执行“=B3”,我将从 B3 中获得不是我想要的值。我想要F3和H3的平均值。基本上就像一个长范围的、可更新的复制/粘贴或 FormulaArray。如果这是有道理的。由于我将在其上实现此功能的工作表将包含许多公式实例,因此我希望能够在一个地方更改它们并自动进行更新,而无需复制/粘贴。我还将调用另一个文档中的公式。所以我想要一种方法,通过它我可以将 B3 更改为 MULTIPLY 公式,它会自动将该更改应用于 G 列中的单元格,当然引用相关单元格。这甚至可能吗?
我确实发现了一个与此非常相似的问题:
How do you get the formula from a cell instead of the value?
但是在这两个可行的解决方案中,Ruben 的 CELLFORMULA 设法将函数作为字符串拉入(就像在 G5 中一样),这很接近! Luiz's 根本不适合我,尽管看起来他确实在尝试做我想做的事。我摆弄它,但无论我做什么,我都无法让它工作。其他建议都不起作用。
这是我为说明我在寻找什么而制作的测试表:
补充:
正如我所说,Ruben 的代码按预期完美运行,Luiz 表示他自己做了一些调整,以便让公式在新单元格中执行。但是复制和粘贴 Luiz 的代码只会产生错误,并且尝试自己调整它是一个失败的原因,因为我最近才开始编写脚本和编码。我只是尽力将 Ruben 的原始代码与 Luiz 的更改代码进行比较和对比,并找出可能是错误的任何差异。像这样的:
function CELLFORMULA(reference) {
var ss = SpreadsheetApp;
var sheet = ss.getActiveSheet();
var formula = ss.getActiveRange().getFormula();
var re = /cellformula\((.*)\);/g;
var args = re.exec(formula);
try {
var range = sheet.getRange(args[1]);
}
catch(e) {
throw new Error(args[1] + ' is not a valid range');
}
return range.getFormula();
}
Luiz 似乎没有像 Ruben 那样指出变量?我不知道。但是这两个代码的根本区别似乎是:
var args = formula.match(/=\w+\((.*)\)/i);
在鲁本的与在路易斯的(未更改)中发现的内容:
re = /cellformula\((.*)\);/g;
args = re.exec(formula);
在我看来 re.exec(formula) 是 Luiz 的一段代码,它应该导致执行公式,而不是仅仅将其作为字符串放入单元格中,但我肯定是错的。
正如我所说,我对这个和“(/=\w+((.))/i)”和“/cellformula((.));/g”部分不熟悉完全在我头上。我试图搜索该语法以更好地理解它,但没有运气。
【问题讨论】:
-
欢迎。添加您尝试根据您的特定目标调整参考答案的代码。
标签: google-apps-script google-sheets google-sheets-formula