找回密码
 立即注册

QQ登录

只需一步,快速开始

高阳0910

初级会员

34

主题

125

帖子

419

积分

初级会员

积分
419
高阳0910
初级会员   /  发表于:2022-10-25 14:55  /   查看:2904  /  回复:21
首先是通过 正则的方式 去设置单元格 输入格式为手机号。 设置的时候单元格验证 是正常的。
但是
转成json 以后  再其他地方 fromJSON  后验证就有问题了。
通过监听 看了一下两个的区别。fromJSON后的验证中 少了 function ,如图中上面的红框中是设置以后 监听出来的。是正常的。下面的红框中是监听出来的错误的。function 直接变成了 undefined
image.png304993895.png
设置正则验证的代码 是

const sheet = spread.getActiveSheet()
  sheet.addCustomFunction(new RegExFunction())
  var dv8 = GC.Spread.Sheets.DataValidation.createFormulaValidator('REGEX("^1[3-9]\\d{9}$")')
  dv8.ignoreBlank(false)
  dv8.inputTitle('手机号码')
  dv8.inputMessage('格式必须为手机号码!')
  sheet.getCell(rowIndex, columnIndex).validator(dv8)



正则的js 是这样的
image.png823468932.png
为什么会有问题产生呢。

21 个回复

倒序浏览
xcymoo
超级版主   /  发表于:2022-10-25 15:44:19
沙发
本地测试后没有问题,请问可以贴一下您fromJSON的代码吗?
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-10-25 18:09:59
板凳
回复 使用道具 举报
高阳0910
初级会员   /  发表于:2022-10-27 09:49:00
地板
xcymoo 发表于 2022-10-25 15:44
本地测试后没有问题,请问可以贴一下您fromJSON的代码吗?

能把您的demo  发一下吗  我比较一下看看有什么区别
回复 使用道具 举报
xcymoo
超级版主   /  发表于:2022-10-27 10:55:29
5#
高阳0910 发表于 2022-10-27 09:49
能把您的demo  发一下吗  我比较一下看看有什么区别

其实代码也没有复杂的内容,就是有一点要注意,fromJSON里面的参数要用JSON.parse方法转换一下,不能直接把字符串传进去。我之前测的时候直接传字符串就有问题,用JSON.parse转换后就没问题了,你可以试试
回复 使用道具 举报
高阳0910
初级会员   /  发表于:2022-10-27 11:32:30
6#
xcymoo 发表于 2022-10-27 10:55
其实代码也没有复杂的内容,就是有一点要注意,fromJSON里面的参数要用JSON.parse方法转换一下,不能直接 ...

好的  稍后试一下。
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2022-10-27 17:47:02
7#
本帖最后由 Ellia.Duan 于 2022-10-28 10:19 编辑
高阳0910 发表于 2022-10-27 11:32
好的  稍后试一下。

请问您的问题解决了吗?
回复 使用道具 举报
高阳0910
初级会员   /  发表于:2022-11-2 14:16:34
8#
Ellia.Duan 发表于 2022-10-27 17:47
请问您的问题解决了吗?

没有 。问题一直存在。
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2022-11-2 15:02:44
9#
您好,可以参考附件中的demo进行检查,

附件中的demo进行正则表达式匹配后,可以正常序列化
image.png462189025.png image.png365720824.png

自定义特性序列转换.html

3.91 KB, 下载次数: 67

回复 使用道具 举报
高阳0910
初级会员   /  发表于:2022-11-2 15:05:10
10#
本帖最后由 高阳0910 于 2022-11-2 15:17 编辑
xcymoo 发表于 2022-10-25 15:44
本地测试后没有问题,请问可以贴一下您fromJSON的代码吗?

今天有尝试改了一下。

修改了设置单元格 必须输入手机号的 数据验证。
reExFunction.js


import * as GC from '@grapecity/spread-sheets'
function RegExFunction (reg) {
  if (reg.substring(0, 1) === '/') {
    reg = reg.substring(1, reg.length)
  }
  if (reg.substring(reg.length - 1, reg.length) === '/') {
    reg = reg.substring(0, reg.length - 1)
  }
  this.reg = reg;
}
RegExFunction.prototype = new GC.Spread.Sheets.ConditionalFormatting.Condition();
RegExFunction.prototype.evaluate = function (evaluator, baseRow, baseColumn, actualObj) {
  debugger
  var reg = new RegExp(this.reg);
  if (reg.test(actualObj)) {
    return true;
  } else {
    return false;
  }
};

export default RegExFunction



设置单元格的方式
  const sheet = spread.getActiveSheet()
  let nCondition = new RegExFunction('/^1[3456789]\d{9}$/');
  let dv8 = new GC.Spread.Sheets.DataValidation.DefaultDataValidator(nCondition);
  dv8.type(GC.Spread.Sheets.DataValidation.CriteriaType.custom);
  dv8.inputTitle('手机号码')
  dv8.inputMessage('格式必须为手机号码!')
  dv8.ignoreBlank(false)
  sheet.setFormatter(rowIndex, columnIndex, '@')

  sheet.getCell(rowIndex, columnIndex).validator(dv8)

设置以后 手动验证一下 输入1 会提示,输入13112345678 不会提示。
然后使用  localStorage.setItem('spreadJson', JSON.stringify(this.spread.toJSON()))  放到内存中
再另一个vue页面使用 this.spread.fromJSON( JSON.parse(localStorage.getItem('spreadJson')))
在新页面再次验证 ,不论输入什么都会提示错误。

这是toJSON以后的 数据

{
  "version": "15.1.2",
  "sheetCount": 1,
  "allowExtendPasteRange": true,
  "customList": [],
  "sheets": {
      "Sheet1": {
          "name": "Sheet1",
          "isSelected": true,
          "activeRow": 1,
          "activeCol": 1,
          "visible": 1,
          "frozenTrailingRowStickToEdge": true,
          "frozenTrailingColumnStickToEdge": true,
          "theme": "Office",
          "data": {
              "dataTable": {
                  "1": {
                      "1": {
                          "style": {
                              "backColor": "rgba(250, 205, 145, 1)",
                              "formatter": "@",
                              "borderLeft": {
                                  "style": 1
                              },
                              "borderTop": {
                                  "style": 1
                              },
                              "borderRight": {
                                  "style": 1
                              },
                              "borderBottom": {
                                  "style": 1
                              }
                          },
                          "bindingPath": "Sheet1_B2"
                      }
                  }
              },
              "defaultDataNode": {
                  "style": {
                      "themeFont": "Body"
                  }
              }
          },
          "rowHeaderData": {
              "defaultDataNode": {
                  "style": {
                      "themeFont": "Body"
                  }
              }
          },
          "colHeaderData": {
              "defaultDataNode": {
                  "style": {
                      "themeFont": "Body"
                  }
              }
          },
          "leftCellIndex": 0,
          "topCellIndex": 0,
          "selections": {
              "0": {
                  "row": 1,
                  "rowCount": 1,
                  "col": 1,
                  "colCount": 1
              },
              "length": 1
          },
          "rowOutlines": {
              "items": []
          },
          "columnOutlines": {
              "items": []
          },
          "validations": [
              {
                  "ignoreBlank": false,
                  "inputTitle": "手机号码",
                  "inputMessage": "格式必须为手机号码!",
                  "type": 7,
                  "condition": {
                      "ranges": [
                          {
                              "row": 1,
                              "rowCount": 1,
                              "col": 1,
                              "colCount": 1
                          }
                      ]
                  },
                  "ranges": "B2",
                  "highlightStyle": "{\"type\":0,\"color\":\"red\"}"
              }
          ],
          "cellStates": {},
          "states": {},
          "outlineColumnOptions": {},
          "autoMergeRangeInfos": [],
          "shapeCollectionOption": {
              "snapMode": 0
          },
          "printInfo": {
              "paperSize": {
                  "width": 850,
                  "height": 1100,
                  "kind": 1
              }
          },
          "index": 0
      }
  },
  "sheetTabCount": 0
}




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