首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >有没有办法计算存储在单元格中的公式?

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

Stack Overflow用户
提问于 2013-04-30 15:35:00
回答 9查看 38.5K关注 0票数 33

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

我发现在MS Excel中有一个EVALUATE()函数(它看起来有点难以正确使用)。但我在Google Docs中找不到任何类似的东西。

我也搜索了整个function list,但没有找到任何有用的东西...

EN

回答 9

Stack Overflow用户

发布于 2013-04-30 21:16:46

不,谷歌表格中没有与Excel的EVALUATE()等同的东西。

这背后有很长的历史,例如this old post

如果您只对简单的数学感兴趣(如您的问题所示),可以使用custom function轻松完成。

代码语言:javascript
运行
AI代码解释
复制
function doMath( formula ) {
  // Strip leading "=" if there
  if (formula.charAt(0) === '=') formula = formula.substring(1);
  return eval(formula)
}

例如,对于您的A1,将=doMath(A1)放入另一个单元格,它将是3

票数 27
EN

Stack Overflow用户

发布于 2016-11-22 04:20:41

简短的回答

正如前面提到的previously,Google Sheets没有内置的评估函数,但Google Sheets可以扩展以添加此函数。幸运的是,可以使用一些SocialCalc文件来简化这一过程。

脚本

Google spreadsheet上,我分享了我的进展。此时,我添加了我认为需要的SocialCalc文件、几个函数和几个测试用例。

NOTES

  1. 谷歌表单特定的功能,如过滤器,独特,以及其他在SocialCalc中不可用,以及其他功能,如签名。
  2. 我认为SocialCalc文件应该被https://github.com/marcelklehr/socialcalc上的那些文件取代,因为它最近看起来要更新。H/T到强直性帕金森病(参见https://stackoverflow.com/a/16329364/1595451)

使用

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

示例1

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

B1公式:

代码语言:javascript
运行
AI代码解释
复制
=EVALUATE(A1)

B1显示值:

代码语言:javascript
运行
AI代码解释
复制
3

示例2

要“计算”像=VLOOKUP(2,A1:B3,2)这样的公式,此时我们需要使用“高级”参数。请参见以下示例:

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

C1公式:

代码语言:javascript
运行
AI代码解释
复制
=EVALUATE(B1,"data","A1:B3")

C1显示值:

代码语言:javascript
运行
AI代码解释
复制
B

Code.gs

代码语言:javascript
运行
AI代码解释
复制
/**
 *
 * 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

票数 7
EN

Stack Overflow用户

发布于 2016-01-07 15:56:37

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

代码语言:javascript
运行
AI代码解释
复制
myCell.getValue();

这将为您提供myCell中公式的结果(在您的示例中为3)。

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

代码语言:javascript
运行
AI代码解释
复制
function fixFormula(myCell) {
    myCell.setValue(myCell.getValue());
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16303680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文