找回密码
 立即注册

QQ登录

只需一步,快速开始

wyq123321qyw123

注册会员

12

主题

22

帖子

84

积分

注册会员

积分
84
wyq123321qyw123
注册会员   /  发表于:2018-3-1 09:27  /   查看:5853  /  回复:10
blob549986266.png
例如 我要验证红色圈中单元格的值=两个绿色单元格的值之和
利用如下
var dv2 = GC.Spread.Sheets.DataValidation.createFormulaListValidator("SUM(E3,E5)");
此代码验证总是错误,并且无论写怎样的函数都不可用,
请问如果我要做此类验证,需要怎样做?

10 个回复

倒序浏览
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-3-1 10:24:20
沙发
使用createFormulaValidator,而不是createFormulaListValidator,createFormulaListValidator的功能上一个帖子已经说明了
回复 使用道具 举报
wyq123321qyw123
注册会员   /  发表于:2018-3-1 10:40:31
板凳
ClarkPan 发表于 2018-3-1 10:24
使用createFormulaValidator,而不是createFormulaListValidator,createFormulaListValidator的功能上一个 ...

如果改为createFormulaValidator如下验证不起作用,如果将E6换成函数也是不行的  
var dv2 = new GC.Spread.Sheets.DataValidation.createFormulaValidator("E6");
activeSheet.setDataValidator(6, 2, dv2);
回复 使用道具 举报
wyq123321qyw123
注册会员   /  发表于:2018-3-1 14:33:30
地板
ClarkPan 发表于 2018-3-1 10:24
使用createFormulaValidator,而不是createFormulaListValidator,createFormulaListValidator的功能上一个 ...

可以给一个createFormulaValidator使用函数和公式的例子吗?
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-3-1 15:22:13
5#
说错了,不好意思,您这样写就没问题了:
  1. spread.options.highlightInvalidData = true;
  2.                 var dv2 = GC.Spread.Sheets.DataValidation.createNumberValidator(GC.Spread.Sheets.ConditionalFormatting.ComparisonOperators.equalsTo,"=SUM(E3,E5)");
  3.                 sheet.setDataValidator(0,1,dv2);
复制代码
回复 使用道具 举报
wyq123321qyw123
注册会员   /  发表于:2018-3-1 18:01:32
6#
本帖最后由 wyq123321qyw123 于 2018-3-1 18:03 编辑
ClarkPan 发表于 2018-3-1 15:22
说错了,不好意思,您这样写就没问题了:

如下代码中 new GcSpread.Sheets.CellValueCondition();报未定义,是不是由于更新而变更了?
还是说如下代码是错误的?个人写的Demo中引入文件如下:
引入js文件.jpg
D:\Users\WANGYONGQIANG285\Desktop\引入js文件.jpg
如下代码引用论坛中  spreadjs能不能自定义验证器主题帖子中demo

window.onload = function () {
        var spread = new GcSpread.Sheets.Spread(document.getElementById('ss'), { sheetCount: 1 });
        // get spread object
        // var spread = GcSpread.Sheets.findControl(document.getElementById('ss'));

         activeSheet = spread.getActiveSheet();


        var cCondition = new CustomerCondition(1, 4);
        var validator1 = new GcSpread.Sheets.DefaultDataValidator(cCondition);
        validator1.inputTitle = 'Please choose ';
        validator1.ignoreBlank =false;
        validator1.type = GcSpread.Sheets.CriteriaType.Custom;

        activeSheet.setDataValidator(3,3, validator1);
        spread.highlightInvalidData(true);
        activeSheet.setValue(3, 3, -1);
    };

    function CustomerCondition(compareType, expected, formula){
        var self = this;
        self.ignoreBlank = false;
        self.conditionType = "CustomerCondition";
        self.compareType = compareType;
        self.expected = expected;
        self.formula = formula;
    };
    CustomerCondition.prototype = new GcSpread.Sheets.CellValueCondition();
    CustomerCondition.prototype.evaluate = function(evaluator, baseRow, baseColumn, actualValue){
        if(actualValue === this.expected){
            return true;
        }
        else{
            return false;
        }
    }

回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-3-1 18:25:55
7#
您的写法是V9版本的写法啊,而用的是V10版本的SpreadJS,肯定有错啊。首先初始化都搞了V10以后是GC.Spread.Sheets,而不是GcSpread.Sheets 。您是在哪里参考的代码,请参考相应V10版本的。
另外,v10的API发给您,您参考一下:
http://help.grapecity.com/spread ... e.html#welcome.html
根据关键字能够搜索到APIchanges,上面会写接口改动
回复 使用道具 举报
wyq123321qyw123
注册会员   /  发表于:2018-3-5 15:42:43
8#
ClarkPan 发表于 2018-3-1 18:25
您的写法是V9版本的写法啊,而用的是V10版本的SpreadJS,肯定有错啊。首先初始化都搞了V10以后是GC.Spread.S ...

有没有什么方法 获取页面中所有验证错误的单元格?或者类似的方法
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-3-5 17:09:56
9#
您好:
这个问题您需要循环遍历所有的单元格,判断单元格是否存在数据验证。
如果存在数据验证接下来获取单元格的rowindex与columnindex,value。
然后通过sheet.isValid(rowindex,columnindex,value)来判断该单元格的数据验证是否正确。
回复 使用道具 举报
wyq123321qyw123
注册会员   /  发表于:2018-3-7 17:31:07
10#
ClarkPan 发表于 2018-3-5 17:09
您好:
这个问题您需要循环遍历所有的单元格,判断单元格是否存在数据验证。
如果存在数据验证接下来获取 ...


有两个excel  分别为A、B
每个Excel中都有三个Sheet 分别为A Excel对应 a1、a2 、a3三个Sheet   B Excel对应 b1、b2、b3三个sheet
目前有如下逻辑  B Excel中的b1sheet 中的单元格  需要取A Excel中的a3 sheet 中的单元格数据
在excel中是可以利用公式获取,但是如果用spreadJs不将这六个sheet放在同一个spread中,而是分开的,
有提供方法或怎样才能进行取数或者验证等功能呢?

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