找回密码
 立即注册

QQ登录

只需一步,快速开始

lin123

最新发帖
lin123
中级会员   /  发表于:2018-3-21 09:47:57
11#
本帖最后由 lin123 于 2018-3-21 09:49 编辑
ClarkPan 发表于 2018-3-20 18:42
第一个问题:
设置sheet.options.clipBoardOptions = GC.Spread.Sheets.ClipboardPasteOptions.values;可 ...

您好,
1、这个选项设置了,但是CTRL+V进去的值都进去了,对于进去的值的判断没有生效
editor.onpaste = function(event) {
                var clipData = event.clipboardData;
                return !clipData.getData('text').match(/\D/);
           }

而且单元格通过拖拉还是能够覆盖原格式

2、这段代码里面的replace(/[\u4e00-\u9fa5]/g, '')就是中文Unicode的编码,可是没有生效
回复 使用道具 举报
lin123
中级会员   /  发表于:2018-3-21 11:10:41
12#
刚刚在onkeyup里面加了alert测试,才发现value根本就没有值,都是undefined
editor.onkeyup = function(event) {
                                alert("keyCode="+event.keyCode+"\n value="+this.value);
                                this.value = this.value.replace(/[\u4e00-\u9fa5]/g, '')
                                                .replace(/\D/g, '');
                               
                        }
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-3-21 19:02:51
13#
1.如果要再加上限制判断,需要监听剪切板相关事件,在事件中进行判断,因为目前只是在输入框中进行了判断,而粘贴是不会触发输入框的,spreadjs所有事件参考:
http://help.grapecity.com/spread ... .Sheets.Events.html
2.第二个问题,加上判断空之后还会不会有问题呢?
回复 使用道具 举报
lin123
中级会员   /  发表于:2018-3-22 10:28:54
14#
本帖最后由 lin123 于 2018-3-22 10:45 编辑
ClarkPan 发表于 2018-3-21 19:02
1.如果要再加上限制判断,需要监听剪切板相关事件,在事件中进行判断,因为目前只是在输入框中进行了判断, ...

其实我想要单元格的格式不让用户覆盖掉,监听的话是在
Events.ClipboardPasting时判断是不是在那个单元格类型,再处理。

感觉下面的这两个弄好应该就能实现。  下面是我的代码文件,你看看

  1. <div>NumberCellType.prototype.getEditorValue = function(editorContext) {
  2.    if (editorContext) {
  3.     var input = editorContext;
  4.     var value = $(input).val();
  5.     return value;//没取到值
  6.    }
  7.   };
  8.   NumberCellType.prototype.setEditorValue = function(editorContext, value) {</div><div>   if (editorContext && value) {
  9.     var input = editorContext;
  10.     $(input).val(value);
  11.    }
  12.   };</div>
复制代码


test1.zip

1.85 KB, 下载次数: 180

回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-3-22 16:51:00
15#
您好该了一下代码,参考:
  1. $(document).ready(function () {
  2.                 window.onload = function() {
  3.           var spread = new GC.Spread.Sheets.Workbook($("#ss")[0], { sheetCount : 1 });
  4.           var sheet = spread.getActiveSheet();
  5.           //非数字禁止输入
  6.           function NumberCellType() {
  7.           }
  8.           NumberCellType.prototype = new GC.Spread.Sheets.CellTypes.Text();
  9.           NumberCellType.prototype.paint = function(ctx, value, x, y, w, h,style, options) {
  10.            if (value) {
  11.                 GC.Spread.Sheets.CellTypes.Text.prototype.paint.apply(this, [ctx, value, x, y, w, h, style, options ]);
  12.            }
  13.           };
  14.           NumberCellType.prototype.updateEditor = function(editorContext,  cellStyle, cellRect) {
  15.            if (editorContext) {
  16.                 $(editorContext).width(cellRect.width);
  17.                 $(editorContext).height(100);
  18.                 return {  height : 100 };
  19.            }
  20.           };
  21.           NumberCellType.prototype.createEditorElement = function(context) {
  22.            var editor = GC.Spread.Sheets.CellTypes.Text.prototype.createEditorElement.call(this, context);
  23.            //var textarea = editor.firstChild;
  24.            editor.onkeypress = function(event) {
  25.                 return event.keyCode >= 48 && event.keyCode <= 57 || event.keyCode == 46
  26.            }
  27.            editor.onkeyup = function(event) {
  28.                 this.innerHTML = this.innerHTML.replace(/[\u4e00-\u9fa5]/g, '').replace(/\D/g, '');
  29.            }
  30.            editor.onpaste = function(event) {
  31.                 var clipData = event.clipboardData;
  32.                 return !clipData.getData('text').match(/\D/);
  33.            }
  34.            editor.ondragenter = function(event) {
  35.                 return false;
  36.            }
  37.            return editor;
  38.           };
  39.           NumberCellType.prototype.setEditorValue = function(editorContext, value) {
  40.            if (editorContext && value) {
  41.                 var input1 = editorContext;
  42.                 $(input1).val(value);
  43.            }
  44.           };
  45.           NumberCellType.prototype.isReservedKey = function(e) {
  46.            return (e.keyCode === GC.Spread.Commands.Key.tab && !e.ctrlKey&& !e.shiftKey && !e.altKey);
  47.           };
  48.           NumberCellType.prototype.isEditingValueChanged = function(oldValue,  newValue) {
  49.            if (newValue != oldValue) {
  50.                 return true;
  51.            }
  52.            return false;
  53.           };
  54.           var numberCellType = new NumberCellType();
  55.           sheet.getCell(0,3).value("11");
  56.           sheet.getRange(1,3,5,1).cellType(numberCellType);
  57.         }
  58.                
  59.         });
复制代码


这里没有实现复制粘贴功能,这块可以监听ClipboardPasting事件,在事件中检测是否符合输入规则,不符合调用cancel来取消复制。
复制可以设置sheet.options.clipBoardOptions = GC.Spread.Sheets.ClipboardPasteOptions.values; 这样只会粘贴值,不会粘贴格式
另外拖拽本身就是会覆盖格式的,如果您不想覆盖可以禁止拖拽功能。

评分

参与人数 1满意度 +5 收起 理由
lin123 + 5 赞一个!

查看全部评分

回复 使用道具 举报
lin123
中级会员   /  发表于:2018-3-22 17:46:42
16#
本帖最后由 lin123 于 2018-3-23 09:52 编辑
ClarkPan 发表于 2018-3-22 16:51
您好该了一下代码,参考:

this.innerHTML和以前的this.value一样,没效果

试了监听,里面没有设置的pasteData的方法,倒是可以获取值
  1. <div>sheet.bind(GC.Spread.Sheets.Events.ClipboardPasted, function (sender, args) {
  2.    var pastedText = args.pasteData.text;
  3.    console.log("ing"+pastedText+"\n");
  4.   });</div><div>sheet.bind(GC.Spread.Sheets.Events.ClipboardPasting, function (sender, args) {
  5.    var pasteData = args.pasteData;
  6.    var pastedText = args.pasteData.text;
  7.    pasteData.setData('text',1);
  8.       console.log("ing"+args.pasteData.text);
  9.   });</div>
复制代码
但是能获取却改不了又没有用。看了api里面,没有改的方法
http://help.grapecity.com/spread ... oardPasting_EV.html

里面的remarks里面没有设置的方法


回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-3-23 09:42:25
17#
您用的是哪个版本的SpreadJS,我在V11版本中试了,没有问题啊,这个是我通过debug调试出来取值的结果,这样demo给您,您再看看。
另外粘贴那个就像我之前说的,在事件中取出剪切板的值去判断,如果不符合规则,将本次粘贴操作取消就可以了。取消粘贴操作:
args.cancel = true;
这个代码demo中也有,您看一下

model_v11.0.1.html

3.17 KB, 下载次数: 186

回复 使用道具 举报
lin123
中级会员   /  发表于:2018-3-23 09:45:20
18#
ClarkPan 发表于 2018-3-23 09:42
您用的是哪个版本的SpreadJS,我在V11版本中试了,没有问题啊,这个是我通过debug调试出来取值的结果,这样 ...

不是要取消黏贴,是要改黏贴版里的值
回复 使用道具 举报
lin123
中级会员   /  发表于:2018-3-23 09:45:21
19#
本帖最后由 lin123 于 2018-3-23 09:48 编辑
ClarkPan 发表于 2018-3-23 09:42
您用的是哪个版本的SpreadJS,我在V11版本中试了,没有问题啊,这个是我通过debug调试出来取值的结果,这样 ...

在监听里面能知道值
var pastedText = args.pasteData.text;
但有没有办法改这个值,然后在黏贴
回复 使用道具 举报
lin123
中级会员   /  发表于:2018-3-23 10:21:26
20#
ClarkPan 发表于 2018-3-23 09:42
您用的是哪个版本的SpreadJS,我在V11版本中试了,没有问题啊,这个是我通过debug调试出来取值的结果,这样 ...

你好,你这个model看了,有些地方没有影响到需要的功能,所以我去掉了。
请看一下我这个版本的,最下面的监听需要改变黏贴版里的值怎么弄?

only_number_test.zip

1.38 KB, 阅读权限: 150, 下载次数: 0

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