10

在电子表格中,我可以输入=SIN(45)+123一个单元格,它将被评估。

如何在自定义函数中评估电子表格函数,例如像这样工作的“eval”函数:

function myFunc() {
  return Sheet.eval("=SIN(45)+123")
}

可能吗 ?

请注意,我并不特别关心SIN函数,我想要的是能够访问完整的电子表格函数库(PMTQUERYNPER等。)

4

6 回答 6

6

Apps-Script 中的电子表格函数

不可能 - 这已经被问过很多次了。建议您检查 google-apps-script 问题列表,看看是否有任何变化。但是最后我查了一下,没有办法,他们也没有计划添加它。 https://code.google.com/p/google-apps-script-issues/issues/list

Ethercalc - java 脚本电子表格公式

如果需要,您可以随时从“ethercalc”复制代码,因为它具有电子表格公式的 java 脚本版本。 https://github.com/audreyt/ethercalc

于 2014-11-10T22:37:55.620 回答
6

我知道这是一个老问题,但它可能会对某人有所帮助。只需将公式分配给一个范围,然后获取值。

//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("");     
于 2019-05-28T14:02:27.550 回答
3

我得到了这个工作。使用设定值就可以了。因此是这样的:

function MyFun1(){
  SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange('A1').setValue(Myfun2())
}

function MyFun2(){
   return "=SIN(45)+123"
}

希望这可以帮助!

于 2015-10-22T14:54:29.680 回答
1

我认为您需要将此问题分为两个不同的问题。

您想获取电子表格中已有的数据,执行计算,然后打印结果,还是想在与电子表格中的数据无关的代码中对计算使用 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)将电子表格数据加载到内存中的一个(或多个)变量中,执行计算,并使用类似的函数将最终结果打印到电子表格中。

让我知道这是否有帮助。

于 2014-11-07T17:45:42.447 回答
1

我遇到了这个问题,试图找到一种方法来评估函数的一部分,就像在 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);
  }
}
于 2018-05-20T07:33:26.773 回答
0

我不知道高级功能是否可行。但是,可以使用一些常见且易于理解的函数,例如(求和、减法等)。

以下是我在脚本本身中完成计算后用于设置值的代码。

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”以自动更新返回值。

于 2017-01-06T16:35:19.200 回答