在电子表格中,我可以输入=SIN(45)+123
一个单元格,它将被评估。
如何在自定义函数中评估电子表格函数,例如像这样工作的“eval”函数:
function myFunc() {
return Sheet.eval("=SIN(45)+123")
}
可能吗 ?
请注意,我并不特别关心SIN
函数,我想要的是能够访问完整的电子表格函数库(PMT
、QUERY
、NPER
等。)
在电子表格中,我可以输入=SIN(45)+123
一个单元格,它将被评估。
如何在自定义函数中评估电子表格函数,例如像这样工作的“eval”函数:
function myFunc() {
return Sheet.eval("=SIN(45)+123")
}
可能吗 ?
请注意,我并不特别关心SIN
函数,我想要的是能够访问完整的电子表格函数库(PMT
、QUERY
、NPER
等。)
不可能 - 这已经被问过很多次了。建议您检查 google-apps-script 问题列表,看看是否有任何变化。但是最后我查了一下,没有办法,他们也没有计划添加它。 https://code.google.com/p/google-apps-script-issues/issues/list
如果需要,您可以随时从“ethercalc”复制代码,因为它具有电子表格公式的 java 脚本版本。 https://github.com/audreyt/ethercalc
我知道这是一个老问题,但它可能会对某人有所帮助。只需将公式分配给一个范围,然后获取值。
//asign a formula to the range
var range = sheet.getRange("A1").setFormula("=SUM(D1:D100)");
//get the result
var result = range.getValue();
//clean up
range.setFormula("");
我得到了这个工作。使用设定值就可以了。因此是这样的:
function MyFun1(){
SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange('A1').setValue(Myfun2())
}
function MyFun2(){
return "=SIN(45)+123"
}
希望这可以帮助!
我认为您需要将此问题分为两个不同的问题。
您想获取电子表格中已有的数据,执行计算,然后打印结果,还是想在与电子表格中的数据无关的代码中对计算使用 sin() 函数?
如果您尝试执行后者,您应该能够通过Math.sin()
在您的 Google Apps 脚本中使用来引用电子表格函数。有关sin()
在 JavaScript 中使用该函数的更多信息,请查看这篇文章:http ://www.w3schools.com/jsref/jsref_sin.asp
如果您尝试做前者,那么您应该做的是使用一个readRows()
函数(更多信息可在此处获得:http: //gassnippets.blogspot.com/2012/11/create-your-first-google-apps-script。 html)将电子表格数据加载到内存中的一个(或多个)变量中,执行计算,并使用类似的函数将最终结果打印到电子表格中。
让我知道这是否有帮助。
我遇到了这个问题,试图找到一种方法来评估函数的一部分,就像在 Excel 中可能的那样。
这是我肮脏的解决方法 - 您可以简单地将活动单元格的值或显示值存储在一个变量中,并根据自己的喜好使用它,而不是在 msgbox 中输出结果。
但是请注意,该功能将暂时覆盖您当前选择的单元格中的任何内容,并且需要在结果可用之前重新计算工作表。因此,如果您需要评估多个单元格值,这不是一个可行的解决方案。
function evalPart() {
var ui = SpreadsheetApp.getUi();
myPart = Browser.inputBox("Enter formula part:", ui.ButtonSet.OK_CANCEL);
if (myPart != "cancel") {
myActiveCell = SpreadsheetApp.getActiveSpreadsheet().getActiveCell();
myBackup = myActiveCell.getFormula();
myActiveCell.setFormula(myPart);
Browser.msgBox("Result of \\n \\n" + myPart + " \\n \\n " + myActiveCell.getDisplayValue());
myActiveCell.setFormula(myBackup);
}
}
我不知道高级功能是否可行。但是,可以使用一些常见且易于理解的函数,例如(求和、减法等)。
以下是我在脚本本身中完成计算后用于设置值的代码。
function MyFun1() {
SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange('A1').setValue(MyFun2());
}
function MyFun2() {
var one = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Dashboard");
var two = one.getRange('A2').getValue();
var three = one.getRange('A3').getValue(); return two*three;
}
不要忘记在 Myfun1() 上添加触发器“onEdit”以自动更新返回值。