找回密码
 立即注册

QQ登录

只需一步,快速开始

user10086

注册会员

3

主题

10

帖子

35

积分

注册会员

积分
35
  • 95

    金币

  • 3

    主题

  • 10

    帖子

最新发帖
user10086
注册会员   /  发表于:2023-12-20 12:03  /   查看:1890  /  回复:7
本帖最后由 Richard.Huang 于 2023-12-20 14:00 编辑

产品:SpreadJS、GcExcel
版本:SpreadJSV9、GcExcelV5.1.1

V9版本前端gc.Spread转为JSON字符,后端com.grapecity.documents.excel.Workbook使用fromJson初始化对象时会报错:java.lang.ClassCastException: Can't cast to number: 1900-01-31T15:54:17.000Z,发现这个是表单里设置的日期验证器导致的,这个是日期验证器设置有问题么,还是后端不支持带日期验证器的表单反序列化 image.png662406615.png

7 个回复

倒序浏览
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2023-12-20 13:59:01
沙发
您好,请问您是前端设置了日期验证器后导出成ssjson,并在后端端通过GcExcel进行解析但是报错是吗?请问能否将您的ssjson文件提供一下呢,方便我们进行相关测试
回复 使用道具 举报
user10086
注册会员   /  发表于:2023-12-20 14:04:29
板凳
Richard.Huang 发表于 2023-12-20 13:59
您好,请问您是前端设置了日期验证器后导出成ssjson,并在后端端通过GcExcel进行解析但是报错是吗?请问能 ...

是的11111111111111111

jsonStr.zip

5.84 KB, 下载次数: 284

JSON文件

回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2023-12-20 15:10:05
地板
user10086 发表于 2023-12-20 14:04
是的11111111111111111

您好,经过测试和调研,我们发现您的日期验证器中的expected参数是字符串类型的日期,GcExcel无法对该类日期格式做数字类型的验证。正确的日期验证器的expected参数应该是一个OADate类型的字符串,GcExcel可以解析该日期。
image.png901900329.png

请问您是如何设置这个日期验证器的,能将您的代码或者操作详细告知让我们进行验证吗
回复 使用道具 举报
user10086
注册会员   /  发表于:2023-12-20 16:10:04
5#
Richard.Huang 发表于 2023-12-20 15:10
您好,经过测试和调研,我们发现您的日期验证器中的expected参数是字符串类型的日期,GcExcel无法对该类 ...

验证器构建 image.png498594970.png 单元格设置 image.png986887817.png
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2023-12-20 17:38:45
6#
本帖最后由 Richard.Huang 于 2023-12-20 17:45 编辑
user10086 发表于 2023-12-20 16:10
验证器构建单元格设置

您好,我在最新的SpreadJS中按照您的代码方式进行测试,但是并没有复现本贴中所描述的问题,因此猜测是老版本的bug。对于V10之前的版本我这里没有相关资源可以测试。我下面提供一个可能可行的解决思路,您可以测试一下,如果仍然存在问题,建议升级SpreadJS的版本来解决该问题。
  1. // 修改创建验证器中添加的日期格式,改为OADate类型的字符串
  2. spread.options.highlightInvalidData = true;
  3. var dv = GC.Spread.Sheets.DataValidation.createDateValidator(
  4.   GC.Spread.Sheets.ConditionalFormatting.ComparisonOperators.between,
  5.   (new Date("2023-01-01") - Date.parse("1899-12-30")) / (24 * 60 * 60 * 1000),
  6.   (new Date("2023-12-12") - Date.parse("1899-12-30")) / (24 * 60 * 60 * 1000)
  7. );
  8. dv.showInputMessage(true);
  9. dv.inputMessage("Enter a date between 12/31/2012 and 12/31/2013.");
  10. dv.inputTitle("Tip");
  11. sheet.getCell(0, 0).validator(dv);
复制代码

回复 使用道具 举报
user10086
注册会员   /  发表于:2023-12-20 18:46:36
7#
好的,那请问下toJSON时有没有参数可以设置排除掉格式验证对象呀,让得到的json对象不包含格式验证这部份信息
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2023-12-21 10:13:39
8#
user10086 发表于 2023-12-20 18:46
好的,那请问下toJSON时有没有参数可以设置排除掉格式验证对象呀,让得到的json对象不包含格式验证这部份信 ...

我们没有这类API可以直接清除掉工作簿中的所有数据验证器,您只能通过循环的方式以及配合validator方法中传入null值来进行清除。
  1. let outputSpread = new GC.Spread.Sheets.Workbook();// 为了防止页面发生改变,创建一个影子对象
  2. outputSpread.fromJSON(spread.toJSON())// 对原工作簿作拷贝
  3. var sheetCount = outputSpread.getSheetCount();
  4. for (var i = 0; i < sheetCount; i++) {
  5.   var sheet = outputSpread.getSheet(i);
  6.   sheet.getRange(-1, -1, -1, -1).validator(null); // 清空当前工作表中所有数据验证器
  7. }
  8. outputSpread.toJSON();// 导出对象
复制代码

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