找回密码
 立即注册

QQ登录

只需一步,快速开始

CCKan
银牌会员   /  发表于:2017-7-19 14:25:08
11#
改一下类型名字就行了:

            var oldFormat = GC.Spread.Sheets.CellTypes.Text.prototype.format;
            GC.Spread.Sheets.CellTypes.Text.prototype.format = function (value, format, conditionalForeColor, context) {
                if (value === 0) {
                    return "";
                }

                return oldFormat.call(spread, value, format, conditionalForeColor, context);
            }
回复 使用道具 举报
mohai
注册会员   /  发表于:2017-7-21 09:43:50
12#
本帖最后由 mohai 于 2017-7-21 09:49 编辑
CCKan 发表于 2017-7-18 18:07
var fn = new GC.Spread.CalcEngine.Functions.Function("SUMBDL", 0, 0, "This function...")
fn.isConte ...

这段代码使用没有问题,但是在要新建一个sheet,然后克隆原sheet内容到新sheet页的过程中出现错误: Cannot read property 'isVolatile' of undefined;,这个可以解决吗?拷贝的代码如下 ;
var oldSheetJson = sheet.toJSON()
oldSheetJson.name = sheet.getName() // sheet 的名字需要不一样
sheet2.fromJSON(JSON.parse(JSON.stringify(oldSheetJson)))
回复 使用道具 举报
CCKan
银牌会员   /  发表于:2017-7-21 10:34:02
13#
我这边试了一下没有问题呀,你能提供一个能重现问题的 sample 吗?
回复 使用道具 举报
mohai
注册会员   /  发表于:2017-7-21 17:47:49
14#
CCKan 发表于 2017-7-21 10:34
我这边试了一下没有问题呀,你能提供一个能重现问题的 sample 吗?

我这个问题已经解决了就是跟自定义公式有关系,我解决的代码是:在删除行之前设置自定义公式,在删除完之后再恢复:var func = $wnd.GC.Spread.CalcEngine.Functions.findGlobalFunction(name);
                func.isVolatile = function () {
                    return false;
                };
现在又出现了一个问题就是:我定义的自定义公式在改变其中一个值的时候,不是相关的单元格会重新计算;而是所有的单元格都重新计算了一次,这个bug可以解决吗?我的自定义公式定义如下:
var fn = new $wnd.GC.Spread.CalcEngine.Functions.Function("SUMBD",0,1000,"SUMBD");
                fn.isContextSensitive = function () {
                    return true;
                };
                fn.isVolatile = function () {
                    return true;
                };
                fn.evaluate = function (context) {
                    return funcSUMBD(view, context.row, context.column);
                };
                $wnd.GC.Spread.CalcEngine.Functions.defineGlobalCustomFunction("SUMBD", fn);
回复 使用道具 举报
CCKan
银牌会员   /  发表于:2017-7-21 18:13:25
15#
你把
fn.isVolatile = function () {
                    return true;
                };
这几行代码删除就行了,isVolatile 表示这个函数是不稳定的,比如 RAND 函数。
回复 使用道具 举报
mohai
注册会员   /  发表于:2017-7-24 16:00:10
16#
CCKan 发表于 2017-7-21 18:13
你把
fn.isVolatile = function () {
                    return true;

我把这段代码删除了之后,我的公式就不会自动计算了!
回复 使用道具 举报
CCKan
银牌会员   /  发表于:2017-7-24 16:29:21
17#
那你需要把引用的区域当作参数传给 SUMBD 函数,比如:
sheet.setFormula(1, 1, "SUMBD(A1:A5)");
这样,A1:A5 中任何单元格的值变化了,这个公式都会重新计算。

当然,你需要调整一下函数的实现,指定一下函数参数个数:
fn.maxArgs = 1;
fn.minArgs = 1;
回复 使用道具 举报
CCKan
银牌会员   /  发表于:2017-7-24 16:29:26
18#
那你需要把引用的区域当作参数传给 SUMBD 函数,比如:
sheet.setFormula(1, 1, "SUMBD(A1:A5)");
这样,A1:A5 中任何单元格的值变化了,这个公式都会重新计算。

当然,你需要调整一下函数的实现,指定一下函数参数个数:
fn.maxArgs = 1;
fn.minArgs = 1;
回复 使用道具 举报
mohai
注册会员   /  发表于:2017-7-26 17:28:57
19#
CCKan 发表于 2017-7-24 16:29
那你需要把引用的区域当作参数传给 SUMBD 函数,比如:
sheet.setFormula(1, 1, "SUMBD(A1:A5)");
这样, ...

我的需求是,能够自动获取分组内的当前列的所有行 求和,, 我没办法传啊
回复 使用道具 举报
CCKan
银牌会员   /  发表于:2017-7-26 17:51:36
20#
那你还是用
fn.isVolatile = function () {
                    return true;
                };
多算了就多算了吧,目前有性能问题还是有其它问题?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部