有没有一种方法来评估存储在单元格中的公式?(Is there a way to evaluate a

2019-09-01 12:37发布

在谷歌文档电子表格,我正在寻找类似的东西=EVAL(A1)其中A1被设置为"=1+2"

我发现,在MS Excel中有一个EVALUATE()函数(这似乎有点棘手正确使用)。 但是我无法找到谷歌文档类似的事情。

我还可以通过搜索功能列表 ,但无法找到任何有用的...

Answer 1:

没有,有没有相应的Excel的EVALUATE()在谷歌表。

还有这背后一个很长的历史,看到这个老帖子的实例。

如果你在简单的数学只是有兴趣(如在你的问题中所示),可以很容易地用做自定义的功能 。

function doMath( formula ) {
  // Strip leading "=" if there
  if (formula.charAt(0) === '=') formula = formula.substring(1);
  return eval(formula)
}

例如,与A1,放=doMath(A1)中的另一小区,并且这将是3



Answer 2:

简答

正如提到以前 ,谷歌表不具有一个内置的evaluate函数,但谷歌表可以扩展来添加此功能。 好在一些SocialCalc文件可以用来制造更容易些。

脚本

在谷歌电子表格 ,我分享我的进步。 在这个时候,我补充说,我认为是需要的SocialCalc文件和一对夫妇的功能,和几个测试用例。

注意事项

  1. 谷歌表状的过滤器,独特,等具体功能不可用SocialCalc以及其他功能,如标志。
  2. 我认为SocialCalc文件应该由那些被替换https://github.com/marcelklehr/socialcalc ,因为它看起来是最近更新的。 H / T到eddyparkinson(见https://stackoverflow.com/a/16329364/1595451 )

用途

在链接文件的evaluate功能可以作为一个自定义的功能。

实施例1

A1: '=1+2 (请注意,使用一个撇号的使式由谷歌表格作为字符串进行处理。

B1式:

=EVALUATE(A1)

B1显示值:

3

实施例2

到“EVALUATE”像公式=VLOOKUP(2,A1:B3,2)此时,我们需要使用“高级”的参数。 请看下面的例子:

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

C1式:

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

C1的显示值:

B

Code.gs

/**
 *
 * 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
      }
    }
  }
}

formula1.gs

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

socialcalcconstants.gs

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

socialcalc-3.gs

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



Answer 3:

我知道这样一个老帖子。 我只是想知道,为什么没有人建议:

myCell.getValue();

这会给你(在你的榜样3)了myCell公式的结果。

如果你想要写结果到小区(而不是公式),你可以使用:

function fixFormula(myCell) {
    myCell.setValue(myCell.getValue());
}


Answer 4:

复制并粘贴公式:

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

https://github.com/Spreadsheets/WickedGrid

看起来是所有的“开源”

不会解决这个问题

另外:这个问题“启用脚本,以使用标准的电子表格功能”被标记为“无须改正”,看到https://code.google.com/p/google-apps-script-issues/issues/detail?id=26

Ethercalc有像开源电子表格中的谷歌所谓的Ethercalc

GUI Code: https://github.com/audreyt/ethercalc

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

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



Answer 5:

简单的黑客来评估谷歌电子表格公式:

  1. 选择具有公式的单元格或列
  2. 去编辑 - >查找和替换...
  3. 选中“公式中也搜索”
  4. 替换“=”到“==”
  5. 替换回“==”为“=”
  6. 在相同的“查找和替换”窗口取消选中“公式中也搜索”

公式将评估! :)



文章来源: Is there a way to evaluate a formula that is stored in a cell?