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

QQ登录

只需一步,快速开始

zhengxiang

初级会员

5

主题

19

帖子

253

积分

初级会员

积分
253
最新发帖
zhengxiang
初级会员   /  发表于:2019-4-23 13:52  /   查看:4272  /  回复:5
版本:11.0.0

问题:一个单元格,我想设置可以输入数字和‘-’这种文本横杠,其他非法字符圈起来提示,这种可以实现吗

5 个回复

倒序浏览
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-4-23 17:38:07
沙发
您好,您的这个需求,可以通过自定义单元格实现,请参考附件中的示例。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
zhengxiang
初级会员   /  发表于:2019-4-24 09:12:56
板凳
这个例子有点复杂。
因为没法发图片我举个例子:
【1】,【1.23】,【-】,【大师傅大师傅】         

这四个单元格,我想【1】,【1.23】,【-】  在格式校验的时候通过,【大师傅大师傅】在格式校验中圈起来,圈起来是那个格式校验中的红圈圈起来


我现在用的是数字校验,所以【-】也会被圈起来,我想要实现【-】和数字不被圈起来


回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-4-24 15:37:30
地板
您好,您这个需求实际上单纯设置数据验证无法实现,所以推荐用自定义单元格实现,

在示例的自定义单元格中,paint方法展示了绘制红圈标记的方法,您可以用paint方法中

的value来带入您的条件自行进行判断,如果满足(或不满足)条件时,绘制红圈进行提醒,

  1. CustomBase.prototype.paint = function (context, value, x1, y1, a1, b1, style, ctx) {
  2.         if (!context) {
  3.             return;
  4.         }
  5.         // 当标记为true时,绘制角标
  6.         // 这里的条件可以改为用value判断
  7.         if(this.showEffect){
  8.             context.save();
  9.             let base = a1 > b1 ? b1 / 2 : a1 / 2;
  10.             context.beginPath();
  11.             context.moveTo(x1 + a1, y1);
  12.             context.lineTo(x1 + a1, y1 + base);
  13.             context.lineTo(x1 + a1 - base, y1);

  14.             context.fillStyle ='red';
  15.             context.fill();
  16.             context.closePath();
  17.             context.restore();
  18.         }
  19.         oldPaint.apply(this, [context, value, x1, y1, a1, b1, style, ctx]);
  20.     };
复制代码
回复 使用道具 举报
zhengxiang
初级会员   /  发表于:2019-4-25 15:53:05
5#
本帖最后由 zhengxiang 于 2019-4-25 15:55 编辑

    效果是这样的?我不太懂我想要这样的效果

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-4-25 17:27:13
6#
paint方法里可以获取到canvas的实例,用这个实例绘制你需要的样式,

参考本楼附件示例。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

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