活字格自定义公式(JS):计算字符串表达式
概述
在活字格中通过 JavaScript 创建自定义公式 geteval,实现字符串数学表达式的计算,如将 "1*50" 计算为 50。活字格底层使用 SpreadJS,支持通过其 API 扩展公式。
完整代码
// 计算字符串公式的值,比如 "1*50" 计算结果为 50
function GetEval() {
this.name = "geteval";
this.maxArgs = 1;
this.minArgs = 1;
}
GetEval.prototype = new GC.Spread.CalcEngine.Functions.Function();
GetEval.prototype.evaluate = function(args) {
try {
var expr = arguments[0] == null ? "0" : arguments[0].replace("=", "");
return eval(expr);
} catch (error) {
return 0; // 非法表达式返回 0
}
};
// 注册自定义公式
GC.Spread.CalcEngine.Functions.defineGlobalCustomFunction(
"geteval",
new GetEval()
);使用方式
=geteval("100*2+50") // 返回 250
=geteval(A1) // 计算 A1 单元格中的字符串表达式
=geteval("2^10") // 返回 1024关键说明
- GC.Spread.CalcEngine.Functions.Function():SpreadJS 自定义公式基类
- this.name:公式名称,即表格中使用的函数名
- maxArgs / minArgs:参数个数限制
- eval():JavaScript 内置函数,将字符串作为代码执行
- arguments[0].replace("=", ""):去除可能存在的等号前缀
安全提醒
注意:eval() 存在安全风险,可能执行恶意代码。仅在可信数据源中使用此公式,避免在用户输入场景下使用。如需要更安全的方案,可自行解析四则运算表达式。
安全替代方案(纯四则运算)
// 使用 Function 构造器(比 eval 稍安全)
GetEval.prototype.evaluate = function(args) {
try {
var expr = arguments[0] == null ? "0" : arguments[0];
return new Function("return " + expr)();
} catch (error) {
return 0;
}
}; 标签:
暂无评论
快来发表第一条评论吧!