找回密码
 立即注册

QQ登录

只需一步,快速开始

finstone-lush
金牌服务用户   /  发表于:2021-8-31 09:54  /   查看:2328  /  回复:1
spreadJS 中是否有EVALUETE 函数,实现将公式字符串执行的函数
如Excel中:
image.png694401549.png


如果没有,spreadJS是否有解决方案?不考虑代码层面的实现,单纯通过模板设置解决

1 个回复

倒序浏览
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-8-31 10:50:04
沙发
您好,
EVALUATE函数为宏函数,SpreadJS目前不支持宏函数。
您可以考虑自定义函数,将公式字符串作为参数传入,
然后使用evaluateFormula方法进行计算,获取计算结果,将计算结果返回。
主要代码如下:
  1. //初始化
  2.         var spread = new GC.Spread.Sheets.Workbook(document.getElementById('ss'),{sheetCount: 1});
  3.         var sheet = spread.getActiveSheet();
  4.         // 添加自定义名称
  5.         spread.addCustomName("test", "=Sheet1!$A$1:$B$3", 0, 0, "");


  6.         /*------自定义函数------*/

  7.         //1. 从 GC.Spread.CalcEngine.Functions.Function 派生并重写一些关键方法
  8.         function FactorialFunction() {
  9.             this.name = 'EVALUATE';//函数名
  10.             this.maxArgs = 1;//最大参数个数
  11.             this.minArgs = 1;//最小参数个数
  12.         };
  13.         FactorialFunction.prototype = new GC.Spread.CalcEngine.Functions.Function();
  14.         FactorialFunction.prototype.acceptsReference = function() {
  15.             return true;//函数的参数接受引用单元格区域
  16.         }
  17.         FactorialFunction.prototype.isContextSensitive = function() {
  18.             return true;//为true 时,函数的计算依赖于上下文
  19.         }
  20.         FactorialFunction.prototype.evaluate = function (arg) {
  21.             var formulaString = arg.Lf.arguments[0].value;
  22.             //使用EvaluateFormula()方法来计算公式,而无需在表单的单元格中设置公式
  23.             var value = GC.Spread.Sheets.CalcEngine.evaluateFormula(sheet, formulaString, 0, 0);
  24.             return value;
  25.         }
  26.         var factorial = new FactorialFunction();
  27.         sheet.setValue(0,0,1);
  28.         sheet.setValue(1,0,2);

  29.         document.getElementById('addCustomFunction').addEventListener('click', function() {
  30.             sheet.addCustomFunction(factorial);//将自定义函数添加到 表单里。如果不设置,会报错 #NAME
  31.             sheet.setFormula(3,0,'=EVALUATE("SUM(A1:A2)")');
  32.         })
复制代码
具体请参考附件的demo。

自定义函数_EVALUATE函数.html

3.96 KB, 下载次数: 66

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部