google-apps-script - 使用谷歌表格中的命名范围作为自定义公式中的变量
问题描述
不确定这是否有意义,但我走了。
我想要做的是创建一个不直接链接到单元格的公式。例如:如果我想计算像 D&D 这样的桌面游戏的携带重量,我需要公式(strengthBonus x 5)。对于我当前的尝试,我将范围(而不是单元格)strengthBonus 重命名为 MOD_STR,因此当我输入公式 =(multiply(MOD_STR,5) 时,它就像一个魅力。然后我将该范围命名为“CARRYWEIGHT”,然后在其他地方使用它。
我想做的是创建一个新变量,类似于“定义命名范围”的方式,但不是依赖于电子表格某处的变量,而是他们将从内部公式处理。例如,如果我在一个单元格中键入 =carryweight,它将在该单元格中运行方程式 =MULTIPLY(MOD_STR,5) 并输出答案。我对代码一无所知,但刚刚被指向教程的方向,但我也在这里寻求帮助。
我试过的代码是
function CARRYWEIGHT(MOD_STR){
return MOD_STR*2}
还有别的东西,我不记得是什么,但我至少在电子表格中接受了它。当我输入它时,我收到一个错误,指出结果不是数字。
我不知道从这里去哪里。
提前感谢您的帮助。
解决方案
- 表格公式和 Apps Script 之间的区别在于,在 Apps Script 中,您需要检索与命名范围名称对应的范围的值
- 您不能简单地将范围名称(这是一个字符串!)与数字相乘
以下是如何按名称检索范围并使用其中存储的值进行计算的示例:
function CARRYWEIGHT(MOD_STR){
// retrieve all named ranges in the spreadsheet
var namedRanges = SpreadsheetApp.getActive().getNamedRanges();
//loop through all the results
for (var i = 0; i < namedRanges.length; i++){
var range = namedRanges[i];
//if the range with the name equal to the value of MOD_STR is found, get the cell content of this range
if(range.getName()==MOD_STR){
var value = range.getRange().getValue();
// perform the calculation with the cell content of the named range
return value*2;
}
}
}
从单元格中调用函数 as =CARRYWEIGHT("paste here the name of the range of interest")
,不要忘记引号(除非它是单元格引用)!
我希望这可以帮助您入门,为了进一步了解,请参阅以下参考资料。
参考
推荐阅读
- arrays - Angular 5:根据属性获取数组的所有对象
- react-native - 在 create-react-native-app 项目中突然看到错误“插件/预设文件不允许导出对象,只有功能”
- javascript - Vue.js 的问题:不显示数据
- android - 如何在不影响其大小的情况下降低位图质量?
- c# - 如何在 VSIX DialogPage 中创建文件选择器选项?
- php - 从数组php中删除所有键
- php - 如何使用相同的表格发送不同的电子邮件?
- c++ - 使用静态 Qt 构建在 Linux 上部署 Qt5 应用程序
- c# - Hangfire使用MongoDB执行长时间运行的后台作业不断重启
- windbg - 在 Windows 上使用 QEMU 调试 UEFI