请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

LJF_Sunny

注册会员

11

主题

24

帖子

77

积分

注册会员

积分
77

[已处理] 自定义公式

LJF_Sunny
注册会员   /  发表于:2017-9-25 09:55  /   查看:4021  /  回复:7
我自己定义了一个公式比如:=XMGS("A","B","C"),这样的公式单元格显示的时候是#NAME?,在复制后,粘贴不了我复制的公式。但是Excel自己定义的公式是可是复制、粘贴的!请问用什么方法可以解决这个问题,或者说怎么将我自定义的公式设置成spread JS默认的公式.问题截图如下:

image.png830357360.png

7 个回复

倒序浏览
CCKan
银牌会员   /  发表于:2017-9-25 10:32:27
沙发
应该可以黏贴的呀,你先定义好这个函数,再设置公式试试,比如:

            var MyF = function () { };
            MyF.prototype = new GC.Spread.CalcEngine.Functions.Function("XMGS", 3, 3);
            MyF.prototype.evaluate = function (arg1, arg2, arg3) {
                return arg1 + arg2 + arg3;
            }
            GC.Spread.CalcEngine.Functions.defineGlobalCustomFunction("XMGS", new MyF());
            sheet.setFormula(3,3, 'XMGS("A", "B", "C")');
回复 使用道具 举报
LJF_Sunny
注册会员   /  发表于:2017-9-25 16:33:25
板凳
非常感谢,已经实现了!
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-9-25 18:04:34
地板
那就结帖了,有什么问题欢迎另开新帖进行询问。
回复 使用道具 举报
LJF_Sunny
注册会员   /  发表于:2017-9-26 16:49:11
5#
ClarkPan 发表于 2017-9-25 18:04
那就结帖了,有什么问题欢迎另开新帖进行询问。

还有一个问题哈!下面的代码是设置单元格的显示值的,比如调用上面的代码显示的是“ABC“,可是我保存这个文件后,再次打开的话,这个显示值变成#NAME?,这个是什么原因呀?
MyF.prototype.evaluate = function (arg1, arg2, arg3) {
                return arg1 + arg2 + arg3;
}

回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-9-26 17:58:21
6#
您好,请问您保存的是Excel吗?如果是EXCEL不支持自定义公式,所以您自定义的公式是无法导出到Excel的
如果您保存的是SSJSON然后通过spreadjs导入,您需要将之前定义自定义公式的方法在导入前进行声明。
回复 使用道具 举报
LJF_Sunny
注册会员   /  发表于:2017-9-27 10:13:11
7#
ClarkPan 发表于 2017-9-26 17:58
您好,请问您保存的是Excel吗?如果是EXCEL不支持自定义公式,所以您自定义的公式是无法导出到Excel的
如 ...

我保存的是Json文件,我现在调用打开Json方法打开保存的Json文件!请问我需要在哪儿进行申明呀?能否给个例子,说明一下!谢谢
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-9-27 10:48:12
8#
本帖最后由 ClarkPan 于 2017-9-27 10:50 编辑

首先需要spreadjs中导入导出自定义方法需要做序列化,参考相关文档:
http://demo.gcpowertools.com.cn/ ... customItemSerialize
也就是在方法的属性中增加typeName属性。
以上面我另一个同事给您的这段代码为例,增加typeName后如下面所示:
            var MyF = function () {                 this.typeName = "mynamespace.MyF";
            };
            MyF.prototype = new GC.Spread.CalcEngine.Functions.Function("XMGS", 3, 3);
            MyF.prototype.evaluate = function (arg1, arg2, arg3) {
                return arg1 + arg2 + arg3;
            }
            GC.Spread.CalcEngine.Functions.defineGlobalCustomFunction("XMGS", new MyF());
您在打开保存json文件之前,先在全局js中调用一下, 然后再打开json文件,因为自定义方法不进行声明,怎么能让spreadjs知道应该去调用哪个方法呢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部