在谷歌文档电子表格,我正在寻找类似的东西=EVAL(A1)
其中A1被设置为"=1+2"
。
我发现,在MS Excel中有一个EVALUATE()
函数(这似乎有点棘手正确使用)。 但是我无法找到谷歌文档类似的事情。
我还可以通过搜索功能列表 ,但无法找到任何有用的...
在谷歌文档电子表格,我正在寻找类似的东西=EVAL(A1)
其中A1被设置为"=1+2"
。
我发现,在MS Excel中有一个EVALUATE()
函数(这似乎有点棘手正确使用)。 但是我无法找到谷歌文档类似的事情。
我还可以通过搜索功能列表 ,但无法找到任何有用的...
没有,有没有相应的Excel的EVALUATE()
在谷歌表。
还有这背后一个很长的历史,看到这个老帖子的实例。
如果你在简单的数学只是有兴趣(如在你的问题中所示),可以很容易地用做自定义的功能 。
function doMath( formula ) {
// Strip leading "=" if there
if (formula.charAt(0) === '=') formula = formula.substring(1);
return eval(formula)
}
例如,与A1,放=doMath(A1)
中的另一小区,并且这将是3
。
正如提到以前 ,谷歌表不具有一个内置的evaluate函数,但谷歌表可以扩展来添加此功能。 好在一些SocialCalc文件可以用来制造更容易些。
在谷歌电子表格 ,我分享我的进步。 在这个时候,我补充说,我认为是需要的SocialCalc文件和一对夫妇的功能,和几个测试用例。
注意事项 :
在链接文件的evaluate功能可以作为一个自定义的功能。
A1: '=1+2
(请注意,使用一个撇号的使式由谷歌表格作为字符串进行处理。
B1式:
=EVALUATE(A1)
B1显示值:
3
到“EVALUATE”像公式=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
}
}
}
}
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
我知道这样一个老帖子。 我只是想知道,为什么没有人建议:
myCell.getValue();
这会给你(在你的榜样3)了myCell公式的结果。
如果你想要写结果到小区(而不是公式),你可以使用:
function fixFormula(myCell) {
myCell.setValue(myCell.getValue());
}
复制并粘贴公式:
也许你可以复制并粘贴您从“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
简单的黑客来评估谷歌电子表格公式:
公式将评估! :)