找回密码
 立即注册

QQ登录

只需一步,快速开始

baigenliang

中级会员

42

主题

126

帖子

972

积分

中级会员

积分
972

活字格认证

baigenliang
中级会员   /  发表于:2015-5-11 09:32  /   查看:4874  /  回复:4
请问如何在spread中实现自定义函数返回多个返回值,类似一个函数返回值和多个out 返回值,我使用的是继承FunctionInfo这种方式。

4 个回复

倒序浏览
baigenliang
中级会员   /  发表于:2015-5-11 11:28:00
沙发
[Serializable]
    public class DevisionFunctionInfo : FunctionInfo
    {

        public override string Name { get { return "Devision"; } }

        public override int MinArgs { get { return 2; } }
        public override int MaxArgs { get { return 2; } }
        public override object Evaluate(object[] args)
        {
            object num1 = args[0]; //除数
            object num2 = args[1]; //被除数
            if (Convert.ToInt32(num2) == 0 || string.IsNullOrEmpty(Convert.ToString(num1)) || string.IsNullOrEmpty(Convert.ToString(num2)))
                return ""; //return null
            return Convert.ToSingle(num1) / Convert.ToSingle(num2);
        }
    }

       [Serializable]
    public class Devision2FunctionInfo : FunctionInfo
    {

        public override string Name { get { return "Devision"; } }

        public override int MinArgs { get { return 3; } }
        public override int MaxArgs { get { return 3; } }
        public override object Evaluate(object[] args)
        {
            object num1 = args[0]; //除数
            object num2 = args[1]; //被除数
            object num3 = args[2];//修约
            if (Convert.ToInt32(num2) == 0 || string.IsNullOrEmpty(Convert.ToString(num1)) || string.IsNullOrEmpty(Convert.ToString(num2)))
                return ""; //return null
            return CommonFunction.FloatToStringRound((Convert.ToSingle(num1) / Convert.ToSingle(num2)).ToString(), Convert.ToSingle(num3));
        }
    }

这个是重载的,只调用第二个,第一个不调用,这个不能用 CommonFunction.FloatToStringRound可以先注释掉。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-5-11 14:06:00
板凳
回复 1楼baigenliang的帖子

自定义函数多返回值问题,目前无法通过自定义函数来解决,FunctionInfo 类目前仅仅能返回一个值用于显示到单元格中。如果是复合类型的返回值会造成 Spread 计算机制无法识别最终的计算结果。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-5-11 15:09:00
地板
回复 2楼baigenliang的帖子

2#问题,方法名称属性 Name 是唯一的,无法同时调用两个相同的函数。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-5-26 09:16:00
5#
回复 3楼iceman的帖子

为了给你提供更优质的服务,请对本次服务进行评分。我们会认真对待你提出的宝贵意见,谢谢   
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部