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

QQ登录

只需一步,快速开始

薰衣草

注册会员

2

主题

8

帖子

66

积分

注册会员

积分
66

微信认证勋章

最新发帖
薰衣草
注册会员   /  发表于:2018-11-28 13:39  /   查看:6318  /  回复:15
单元格设置了保留位数,但是点进去后还是原来的位数,可否让真实值和显示值是一样的,都是通过保留位数计算后的值

15 个回复

倒序浏览
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2018-11-28 15:30:53
沙发
可以实现,但是您描述的这个策略与Excel不同,

所以需要自定义单元格类型来实现。

我上传一个Demo,第三列设置了自定义单元格类型,

您可以参考一下。

CustomCellType_薰衣草.html

4.54 KB, 下载次数: 196

回复 使用道具 举报
薰衣草
注册会员   /  发表于:2018-11-28 17:25:48
板凳
我描述可能有问题,这个你现在实现的是不是就是编辑的时候把值改成了他的显示的值,但是他的真实值还是没有经过保留位数处理,可不可以保留位数的时候把真实值也修改下,因为我们还有数据绑定,绑定后的数据,存储数据库好像还是没有休约的值
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2018-11-28 18:24:47
地板
您好,您这个需求是要单元格样式修约的同时同步到单元格的值上,

这样的操作需要手动实现,在Demo中有getEditorValue函数,


  1.     // 获取编辑层的值
  2.     ShowValueCellType.prototype.getEditorValue = function (editorContext) {
  3.         if (editorContext && editorContext.children.length === 1) {
  4.             var input1 = editorContext.children[0];

  5.             var value = input1.value;
  6.             // 在此执行修约处理
  7.             if(input1.formula){
  8.                 return "=" + input1.formula;
  9.             }
  10.             return value;
  11.         }
  12.     };
复制代码


代码中用注释标记了处理约数的位置。
回复 使用道具 举报
薰衣草
注册会员   /  发表于:2018-11-28 21:40:40
5#
  1. cellType.setEditorValue = function (editorContext, value, cell) {
  2.                                 if (editorContext && editorContext.children.length === 1) {
  3.                                     if (value || value === 0) {
  4.                                         var input1 = editorContext.children[0];
  5.                                         var row = cell.row, col = cell.col;
  6.                                         var sheet = cell.sheet;
  7.                                         var text = sheet.getText(row, col);
  8.                                         input1.value = text;
  9.                                         var formula = sheet.getFormula(row, col);
  10.                                         if(formula){
  11.                                             input1.formula = formula;
  12.                                         }
  13.                                     }
  14.                                 }
  15.                             };
复制代码

我用这个确实可以改变编辑的值,但是除非我点进去,真实值在我移出单元格的时候才会发生变化,我用setValue()改变值后;然后输出他的getText(),和getValue(),还是不一样
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2018-11-29 09:46:38
6#
您好,您的需求是直接把dataSource的值替换成format之后的值,

SpreadJS 没有这样的直接实现方法,我给您解释一下,

因为format与dataSource在SpreadJS中并没有关联,单元格的value是个值,有数据类型,

而format是控制前端展示出来的字符串,您用getText可以获取到format之后的字符串,

想实现您的想法,有几个思路可以供您参考:

1、在SpreadJS中遍历这些设置了format的单元格,用getText获取到它们的格式化字符串,然后替换掉dataSource的值;

2、在后台处理好dataSource的小数位;
回复 使用道具 举报
薰衣草
注册会员   /  发表于:2018-11-29 16:38:03
7#
我用CellChanged 监听方法处理了一下
  1. if(sheet.getValue(info.row,info.col)!=sheet.getText(info.row,info.col)){
  2.                                     sheet.setValue(info.row,info.col,sheet.getText(info.row,info.col))
  3.                             }
复制代码

不知道替换dataSource的值,通过什么方法替换?只知道绑定单元格的行列
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2018-11-29 17:43:34
8#
dataSource是与spreadjs绑定的,SpreadJS无法实现您描述的需求,

所以您只能考虑在ValueChanged等事件中编码更改dataSource对应位置的值。

您能否稍微描述一下您的应用场景?我看看是不是有别的思路可以解决您的需求。
回复 使用道具 举报
薰衣草
注册会员   /  发表于:2018-11-29 17:49:11
9#
场景就是我们在仪器中获取的数据要回填至单元格上,但是保存的时候数据要经过单元格休约后的值,编辑的时候也是
我用事件触发的时候好像有点卡
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2018-11-30 09:30:00
10#
您这种情况,其实不推荐用事件来操作值的休约,您可以在提交保存数据时,遍历dataSource来处理,这样性能还好一些。

另外,您调用SpreadJS事件时,有两个点需要注意一下:

1、如果在事件中需要对表格的数据、样式、公式或其它元素进行修改操作时,

一定要先执行suspendPaint,修改操作完成后再执行resumePaint操作,具体请参考学习指南:

https://demo.grapecity.com.cn/Sp ... #/demos/spreadPaint

2、在事件中再次触发事件会导致递归调用事件的响应函数,比如说在ValueChanged事件中修改单元格的值。

您可以通过调用suspendEvent挂起事件响应后,再修改值,修改完成后调用resumeEvent来恢复事件响应,

API:

http://help.grapecity.com/spread ... k~suspendEvent.html

http://help.grapecity.com/spread ... ok~resumeEvent.html
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部