找回密码
 立即注册

QQ登录

只需一步,快速开始

test11111111111

注册会员

12

主题

35

帖子

103

积分

注册会员

积分
103
test11111111111
注册会员   /  发表于:2022-9-28 17:25  /   查看:2024  /  回复:6
evaluateFormula一个自定义函数,自定义函数返回的null,执行结果为0。

6 个回复

倒序浏览
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-9-28 17:49:30
沙发
您好,您的需求是什么呢?请结合具体的可复现demo详细描述下, 以便这边可以理解此问题。
回复 使用道具 举报
test11111111111
注册会员   /  发表于:2022-9-28 17:54:51
板凳


    window.onload = function () {
        var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"), { sheetCount: 2 });
        initSpread(spread);
    };

    function initSpread(spread) {
        spread.options.allowDynamicArray = true;
        var sheet = spread.getSheet(0);

        sheet.setValue(1, 1, 'Press \'Add a Custom Function\' button');
        sheet.setColumnWidth(1, 225);
        sheet.setColumnWidth(2, 100);
        function FactorialFunction() {
            this.name = "FACTORIAL";
            this.maxArgs = 1;
            this.minArgs = 1;
        }
        FactorialFunction.prototype = new GC.Spread.CalcEngine.Functions.Function();
        FactorialFunction.prototype.evaluate = function (arg) {
            return null;
        };
        var factorial = new FactorialFunction();

        sheet.addCustomFunction(factorial);
        document.getElementById("addCustomFunction").addEventListener('click',function() {
            sheet.setValue(3, 1, 'Formula');
            sheet.setValue(3, 2, '=FACTORIAL(5)');

            console.log(GC.Spread.Sheets.CalcEngine.evaluateFormula(sheet, "=FACTORIAL(5)"));
        });

        document.getElementById("removeCustomFunction").addEventListener('click',function() {
            sheet.removeCustomFunction("FACTORIAL");
            sheet.recalcAll(true);
        });
    };

回复 使用道具 举报
test11111111111
注册会员   /  发表于:2022-9-28 17:56:22
地板
test11111111111 发表于 2022-9-28 17:54
window.onload = function () {
        var spread = new GC.Spread.Sheets.Workbook(document.g ...

FactorialFunction这个返回的是null,
console.log(GC.Spread.Sheets.CalcEngine.evaluateFormula(sheet, "=FACTORIAL(5)")); 出来是0
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-9-28 18:09:21
5#
从测试结果来看,自定义函数设计上当返回值为null时,则该单元格会将计算结果表示为0。
如果您想返回其他值(如 #VALUE!),可以自定义实现。
image.png355720519.png
回复 使用道具 举报
test11111111111
注册会员   /  发表于:2022-10-10 12:15:30
6#
Lynn.Dou 发表于 2022-9-28 18:09
从测试结果来看,自定义函数设计上当返回值为null时,则该单元格会将计算结果表示为0。
如果您想返回其他 ...

您好,我的需求是想区分一下0和null,计算之后都得到0的话,就做不了区分了啊,您有什么解决办法没有
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-10-10 16:25:54
7#
如前面所述,产品设计上对于自定义函数return null即显示为0。
您期待的 return null 在单元格的表现形式是什么呢?显示为空单元格吗?
如果是,可以参考下以下思路:
return 空字符串 ‘’,以此作为null进行区分。
如果业务上需要存储null,在获取value时判断如果是‘’则保存为null,便于后续使用。


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