Google apps script 有没有办法计算存储在单元格中的公式?

Google apps script 有没有办法计算存储在单元格中的公式?,google-apps-script,google-sheets,google-sheets-formula,evaluate,Google Apps Script,Google Sheets,Google Sheets Formula,Evaluate,在Google Docs电子表格中,我正在寻找类似于=EVAL(A1)的内容,其中A1设置为“=1+2” 我发现在MS Excel中有一个EVALUATE()函数(正确使用它似乎有点棘手)。但我在谷歌文档中找不到类似的东西 我也搜索了一下,但没有找到任何有用的 不,在谷歌表单中没有与Excel的EVALUATE()等价的东西 例如,在这一点背后有着悠久的历史 如果你只是对简单的数学感兴趣(如你的问题所示),那么用一个简单的工具就可以很容易地做到 例如,使用A1,将=doMath(A1)放在另一个

在Google Docs电子表格中,我正在寻找类似于
=EVAL(A1)
的内容,其中A1设置为
“=1+2”

我发现在MS Excel中有一个
EVALUATE()
函数(正确使用它似乎有点棘手)。但我在谷歌文档中找不到类似的东西


我也搜索了一下,但没有找到任何有用的

不,在谷歌表单中没有与Excel的
EVALUATE()
等价的东西

例如,在这一点背后有着悠久的历史

如果你只是对简单的数学感兴趣(如你的问题所示),那么用一个简单的工具就可以很容易地做到


例如,使用A1,将
=doMath(A1)
放在另一个单元格中,它将是
3
复制并粘贴公式:

也许您可以从“jQuery.sheet”复制并粘贴所需的公式。移至:

看起来都是“开源的”

无法解决问题

另外:“允许脚本使用标准电子表格功能”问题标记为“不会修复”,请参阅

以太计算器 有一个类似谷歌的开源电子表格叫做Ethercalc

GUI代码:

公式:

演示-关于沙尘暴:
我知道这是一篇老文章。我只是想知道,为什么没有人建议:

myCell.getValue();
这将给出myCell中公式的结果(示例中为3)

如果要将结果写入单元格(而不是公式),可以使用:

function fixFormula(myCell) {
    myCell.setValue(myCell.getValue());
}
简短回答 如前所述,Google Sheets没有内置的评估功能,但Google Sheets可以扩展以添加此功能。幸运的是,可以使用一些SocialCalc文件来简化这一过程

剧本 我正在分享我的进步。此时,我添加了我认为是必需的SocialCalc文件、几个函数和几个测试用例

注释

  • 在SocialCalc中,Google Sheets的特定功能(如FILTER、UNIQUE等)以及其他功能(如SIGN)都不可用
  • 我认为SocialCalc文件应该被上的文件替换,因为它看起来最近要更新。H/T至埃迪帕金森(见)
  • 使用 链接文件上的求值函数可以用作自定义函数

    例1 A1:
    '=1+2
    (请注意,使用撇号可使公式被Google Sheets视为字符串

    B1公式:

    =EVALUATE(A1)
    
    =EVALUATE(B1,"data","A1:B3")
    
    B1显示值:

    3
    
    B
    
    例2 要“评估”类似于
    =VLOOKUP(2,A1:B3,2)
    的公式,此时我们需要使用“高级”参数。请参见以下示例:

    B1:
    '=VLOOKUP(2,A1:B3,2)

    C1公式:

    =EVALUATE(A1)
    
    =EVALUATE(B1,"data","A1:B3")
    
    C1显示值:

    3
    
    B
    
    代码.gs
    /**
    *
    *计算字符串公式
    *
    *@param{1+1}公式字符串
    *@param{“Tests”}sheetName目标工作表。
    *@param{“A1”}协调目标单元格。
    * 
    *@customfunction
    *
    */
    函数求值(公式、表名、坐标){
    //SocialCalc工作表对象
    var scSheet=new SocialCalc.Sheet();
    如果(图纸名称和坐标){
    //将值从Google工作表传递到SocialCalc工作表
    GS_至_SC(scSheet、coord、sheetName);
    }
    var parseinfo=SocialCalc.Formula.parseFormulaInTokens(Formula.substring(1));
    var value=SocialCalc.Formula.evaluate_parsed_Formula(parseinfo,scSheet,1);//解析公式,允许范围返回
    如果(value.type!=“e”){
    返回值.value;
    }否则{
    返回值。错误;
    }
    }
    /**
    *
    *传递指定范围的Google电子表格值
    *到一张社交卡
    *
    *有关详细信息,请参见socialcalc-3上的单元类
    *
    */
    功能GS_至_SC(scSheet、coord、sheetName){
    var ss=SpreadsheetApp.getActiveSpreadsheet();
    如果(图纸名称){
    var sheet=ss.getSheetByName(sheetName);
    var范围=sheet.getRange(坐标);
    }否则{
    变量范围=ss.getRange(coord);
    }
    var rows=range.getNumRows();
    var columns=range.getNumColumns();
    变量单元格,A1表示法,数据类型,值,vtype;
    //双循环将范围内的单元格传递到SocialCalc表
    
    对于(var row=1;row在谷歌电子表格中计算公式的简单方法:

  • 使用公式选择单元格或列
  • 转到编辑->查找并替换
  • 选中“也在公式中搜索”
  • 将“=”替换为“=”
  • 将“==”替换回“=”
  • 在相同的“查找和替换”窗口中,取消选中“也在公式中搜索”

  • 公式将计算!:)

    转换前面没有“+”的表达式列

    92/120
    67/85
    

    等等。

    如果您想评估简单数学(如A1:“(1+2)*9/3”),可以使用查询:

    =query(,"Select "&A1&" label "&A1&" ''",0)
    

    遗憾的是,这不仅仅是简单的数学问题。但也许我可以用一个自定义函数(如你发布的函数)加上INDIRECT()来解决这个问题。@keks-你可能会发现你可以适应应用程序脚本。我希望在javascript中能找到很多,但运气不好。如果你已经将公式写入了cell(并刷新了工作表),这是可行的,但它不允许您在记录之前找出公式的值,将其记录为宏,并且您有一个有效的计算。