Mic*_*upp 20 google-sheets google-apps-script
在Google文档电子表格中,我正在寻找类似于=EVAL(A1)
A1设置的位置"=1+2"
.
我发现在MS Excel中有一个EVALUATE()
功能(使用起来似乎有点棘手).但我在Google文档中找不到类似的内容.
我还搜索了功能列表,但找不到任何有用的东西......
Mog*_*dad 16
不,EVALUATE()
Google表格中没有与Excel相同的内容.
这个背后有悠久的历史,比如这个老帖子.
如果您只对简单的数学感兴趣(如您的问题所示),那么可以使用自定义函数轻松完成.
function doMath( formula ) {
// Strip leading "=" if there
if (formula.charAt(0) === '=') formula = formula.substring(1);
return eval(formula)
}
Run Code Online (Sandbox Code Playgroud)
例如,使用您的A1,放入=doMath(A1)
另一个单元格,它将是3
.
The*_*ter 10
如果你想计算简单的数学(如 A1: "(1+2)*9/3"),你可以使用查询:
=query(,"Select "&A1&" label "&A1&" ''",0)
Run Code Online (Sandbox Code Playgroud)
发送到查询的基本数学select
由 进行评估query
。
我知道这是一个旧帖子。我只是想知道,为什么没有人建议:
myCell.getValue();
Run Code Online (Sandbox Code Playgroud)
这将为您提供 myCell 中公式的结果(在您的示例中为 3)。
如果您想将结果写入单元格(而不是公式),您可以使用:
function fixFormula(myCell) {
myCell.setValue(myCell.getValue());
}
Run Code Online (Sandbox Code Playgroud)
正如提到以前,谷歌表不具有一个内置的evaluate函数,但谷歌表可以扩展来添加此功能.幸运的是,可以使用一些SocialCalc文件来简化这一过程.
在Google电子表格中,我正在分享我的进展.这时我添加了SocialCalc文件,我认为这些文件是必需的,还有几个函数和几个测试用例.
注意:
链接文件上的EVALUATE函数可用作自定义函数.
A1 :( '=1+2
请注意使用撇号使公式被Google表格作为字符串处理.
B1公式:
=EVALUATE(A1)
Run Code Online (Sandbox Code Playgroud)
B1显示值:
3
Run Code Online (Sandbox Code Playgroud)
要"评估"类似的公式=VLOOKUP(2,A1:B3,2)
,此时我们需要使用"高级"参数.请参阅以下示例:
B1: '=VLOOKUP(2,A1:B3,2)
C1公式:
=EVALUATE(B1,"data","A1:B3")
Run Code Online (Sandbox Code Playgroud)
C1显示值:
B
Run Code Online (Sandbox Code Playgroud)
/**
*
* 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
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
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
归档时间: |
|
查看次数: |
20477 次 |
最近记录: |