在Google文档电子表格中,我正在寻找类似=EVAL(A1)
的内容,其中A1设置为"=1+2"
。
我发现在MS Excel中有一个EVALUATE()
函数(使用起来似乎有点棘手)。但我在Google文档中找不到类似内容。
我还搜索了function list,但找不到任何有用的内容......
答案 0 :(得分:16)
不,Google表格中没有与Excel EVALUATE()
相同的内容。
这个背后有悠久的历史,例如this old post。
如果您只是对简单的数学感兴趣(如您的问题所示),可以使用custom function轻松完成。
function doMath( formula ) {
// Strip leading "=" if there
if (formula.charAt(0) === '=') formula = formula.substring(1);
return eval(formula)
}
例如,使用您的A1,将=doMath(A1)
放在另一个单元格中,它将是3
。
答案 1 :(得分:5)
正如前面提到的previously,Google表格没有内置的EVALUATE功能,但Google表格可以扩展为添加此功能。幸运的是,可以使用一些SocialCalc文件来简化这一过程。
在Google spreadsheet我分享我的进度。这时我添加了我认为需要的SocialCalc文件以及一些函数和几个测试用例。
注意:
链接文件上的EVALUATE函数可用作自定义函数。
A1:'=1+2
(请注意使用撇号使公式被Google表格视为字符串。
B1公式:
=EVALUATE(A1)
B1显示值:
3
To" EVALUATE"像=VLOOKUP(2,A1:B3,2)
这样的公式,此时我们需要使用" advanced"参数。请参阅以下示例:
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
}
}
}
}
https://github.com/DanBricklin/socialcalc/blob/master/formula1.js
https://github.com/DanBricklin/socialcalc/blob/master/socialcalcconstants.js
https://github.com/DanBricklin/socialcalc/blob/master/socialcalc-3.js
答案 2 :(得分:2)
复制并粘贴公式:
也许你可以从“jQuery.sheet”复制并粘贴你需要的公式。移至:
https://github.com/Spreadsheets/WickedGrid
看起来都是“开源”
不解决问题
此外:“启用脚本以使用标准电子表格功能”问题标记为“无法修复”,请参阅https://code.google.com/p/google-apps-script-issues/issues/detail?id=26
<强> Ethercalc 强> 谷歌就像开源电子表格名为Ethercalc
GUI代码: https://github.com/audreyt/ethercalc
公式:https://github.com/marcelklehr/socialcalc
演示 - 关于沙尘暴: https://apps.sandstorm.io/app/a0n6hwm32zjsrzes8gnjg734dh6jwt7x83xdgytspe761pe2asw0
答案 3 :(得分:2)
我知道这是一篇旧帖子。我只是想知道,为什么没有人建议:
myCell.getValue();
这将为您提供myCell中公式的结果(在您的示例中为3)。
如果要将结果写入单元格(而不是公式),可以使用:
function fixFormula(myCell) {
myCell.setValue(myCell.getValue());
}
答案 4 :(得分:0)
简单的方法即可评估Google电子表格中的公式:
公式将进行评估! :)
答案 5 :(得分:0)
转换一列不带+的表达式。
...
bucket.query(query, function(err, rows, meta) {
for (row in rows) {
if(row.phonenumber == req.body.phonenumber) {
res.status(500).json({status:"error", resCode: 500, msg:"users Already exist"});
}
}
}
等
答案 6 :(得分:0)
如果要评估简单的数学运算(例如A1:“(1 + 2)* 9/3”),则可以使用查询:
=query(,"Select "&A1&" label "&A1&" ''",0)