为了账号安全,请及时绑定邮箱和手机立即绑定

有没有一种方法可以计算存储在单元格中的公式?

/ 猿问

有没有一种方法可以计算存储在单元格中的公式?

SMILET 2019-11-19 15:17:06

在Google文档电子表格中,我正在寻找类似=EVAL(A1)A1设置为的内容"=1+2"。


我发现在MS Excel中有一个EVALUATE()函数(正确使用似乎有些棘手)。但是我在Google文档中找不到任何类似的内容。


我还搜索了功能列表,但找不到任何有用的信息...


查看完整描述

3 回答

?
慕森王

不,EVALUATE()在Google表格中没有Excel的等效项。


这背后有悠久的历史,例如,请参阅此旧帖子。


如果您只是对简单的数学感兴趣(如您的问题所示),则可以使用自定义函数轻松完成。


function doMath( formula ) {

  // Strip leading "=" if there

  if (formula.charAt(0) === '=') formula = formula.substring(1);

  return eval(formula)

}

例如,将您的A1放在=doMath(A1)另一个单元格中,它将是3。


查看完整回答
反对 回复 2019-11-19
?
潇湘沐

简短答案

正如提到以前,谷歌表不具有一个内置的evaluate函数,但谷歌表可以扩展来添加此功能。幸运的是,可以使用一些SocialCalc文件来简化此操作。


脚本

在Google电子表格中,我正在分享我的进度。这时,我添加了我认为是必需的SocialCalc文件,几个功能以及几个测试用例。


注意事项:


Google Sheets特定的功能(例如FILTER,UNIQUE等)在SocialCalc中不可用,而其他功能(例如SIGN)则不可用。

我认为,SocialCalc文件应替换为https://github.com/marcelklehr/socialcalc上的文件,因为它似乎最近已更新。H / T到eddyparkinson(请参阅https://stackoverflow.com/a/16329364/1595451)

用途

链接文件上的EVALUATE函数可以用作自定义函数。


例子1

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


B1公式:


=EVALUATE(A1)

B1显示值:


3

例子2

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


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


C1公式:


=EVALUATE(B1,"data","A1:B3")

C1显示值:


B

代码

/**

 *

 * Evaluates a string formula

 *

 * @param {"=1+1"}  formula   Formula string 

 * @param {"Tests"} sheetName Target sheet. 

 * @param {"A1"}    coord     Target cell. 

 * 

 * @customfunction

 *

 */

function EVALUATE(formula,sheetName,coord){

  // SocialCalc Sheet object

  var scSheet = new SocialCalc.Sheet();

  if(sheetName && coord){

    // Pass values from a Google sheet to a SocialCalc sheet

    GS_TO_SC(scSheet,coord,sheetName);

  }

  var parseinfo = SocialCalc.Formula.ParseFormulaIntoTokens(formula.substring(1));

  var value = SocialCalc.Formula.evaluate_parsed_formula(parseinfo,scSheet,1); // parse formula, allowing range return

  if(value.type != 'e'){

    return value.value;

  } else {

    return value.error;

  }

}

/**

 *

 * Pass the Google spreadsheet values of the specified range 

 * to a SocialCalc sheet

 *

 * See Cell Class on socialcalc-3 for details

 *

 */

function GS_TO_SC(scSheet,coord,sheetName){

  var ss = SpreadsheetApp.getActiveSpreadsheet();

  if(sheetName){

    var sheet = ss.getSheetByName(sheetName);

    var range = sheet.getRange(coord);

    } else {

      var range = ss.getRange(coord);

  }

  var rows = range.getNumRows();

  var columns = range.getNumColumns();

  var cell,A1Notation,dtype,value,vtype;

  // Double loop to pass cells in range to SocialCalc sheet

  for(var row = 1; row <= rows; row++){

    for(var column = 1; column <= columns; column++){

      cell = range.getCell(row,column);

      A1Notation = cell.getA1Notation();

      value = cell.getValue();

      if(cell.isBlank()){

        dtype = 'b';

        vtype = 'b';

      } else {

        switch(typeof value){

          case 'string':

            dtype = 't';

            vtype = 't';

            break;

          case 'date':

          case 'number':

            dtype = 'v'

            vtype = 'n';

            break;

        }

      }

      scSheet.cells[A1Notation] = {

        datavalue: value,

        datatype: dtype,

        valuetype: vtype

      }

    }

  }

}

公式1.gs

https://github.com/DanBricklin/socialcalc/blob/master/formula1.js


社交常量

https://github.com/DanBricklin/socialcalc/blob/master/socialcalcconstants.js


socialcalc-3.gs

https://github.com/DanBricklin/socialcalc/blob/master/socialcalc-3.js

查看完整回答
反对 回复 2019-11-19
?
Qyouu

复制并粘贴公式:


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


https://github.com/Spreadsheets/WickedGrid


看起来都是“开源”


无法解决问题


另外:“启用脚本以使用标准电子表格功能”问题已标记为“无法修复”,请参阅 https://code.google.com/p/google-apps-script-issues/issues/detail?id=26


Ethercalc 有一个类似Ethercalc的Google开源电子表格


界面代码:https : //github.com/audreyt/ethercalc


公式:https://github.com/marcelklehr/socialcalc


演示-关于沙尘暴:https : //apps.sandstorm.io/app/a0n6hwm32zjsrzes8gnjg734dh6jwt7x83xdgytspe761pe2asw0


查看完整回答
反对 回复 2019-11-19

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信