找回密码
 立即注册

QQ登录

只需一步,快速开始

wangqgsunway

中级会员

84

主题

224

帖子

740

积分

中级会员

积分
740

[已处理] 设置不可编辑

wangqgsunway
中级会员   /  发表于:2019-3-7 18:00  /   查看:3961  /  回复:5
现在知道了单元格的区域,sheet.getRange(range.row, range.col, range.rowCount, range.colCount)后面应该怎么写 才能锁定这个单元格区域,只是作为数据的显示,不让用户编辑,在线等 比较急

5 个回复

倒序浏览
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-3-8 09:50:40
沙发
您好,getRange获取到对应区域的range对象后,可以直接调用locked方法对这个区域的单元格执行锁定操作。

前提是当前sheet表单是受保护状态,如下图中代码所示:

image.png252454528.png
回复 使用道具 举报
wangqgsunway
中级会员   /  发表于:2019-3-8 13:47:10
板凳
KevinChen 发表于 2019-3-8 09:50
您好,getRange获取到对应区域的range对象后,可以直接调用locked方法对这个区域的单元格执行锁定操作。

...

这是调用的代码 我只想修改符合条件的单元格和单元格区域,这样执行以后,全都不能编辑了 ,麻烦看一下
  1. var spread = designer.wrapper.spread;
  2.         var sheetCount = spread.getSheetCount();
  3.         var sheet;
  4.         for (var i = 0; i < sheetCount; i++) {
  5.                 sheet = spread.getSheet(i);
  6.                 sheet.options.isProtected = true;
  7. //                var style = sheet.getDefaultStyle();
  8. //                style.locked = false;
  9.                 var rowCount = sheet.getRowCount();
  10.                 var columnCount = sheet.getColumnCount();
  11.                 for (var row = 0; row < rowCount; row++) {
  12.                         for (var col = 0; col < columnCount; col++) {
  13.                             var bindingPathArray = [];
  14.                             var bindingPathKey;
  15.                             bindingPathKey = sheet.getBindingPath(row, col);
  16.                             if (bindingPathKey) {
  17.                                     sheet.getCell(row, col ).locked(true);
  18.                             }       
  19.                         }
  20.                 }
  21.                 var tables = sheet.tables.all();
  22.             if(tables){
  23.               for (var j = 0; j < tables.length; j++){
  24.                 if(tables[j].bindingPath()){
  25.                   var range = tables[j].dataRange();  
  26.                   var spans =sheet.getSpans(range);
  27.                   sheet.getRange(range).locked(true);         
  28.                 }
  29.               }
  30.             }
  31.                 sheet.options.isProtected = false;
  32.         }
复制代码
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-3-8 19:04:55
地板
您好,我测了这段代码,没绑定的单元格可以编辑啊,把最后一行:

sheet.options.isProtected = false;

删掉就行了,这一行设置了以后,所有单元格都可以编辑了。
回复 使用道具 举报
wangqgsunway
中级会员   /  发表于:2019-3-9 15:09:16
5#
KevinChen 发表于 2019-3-8 19:04
您好,我测了这段代码,没绑定的单元格可以编辑啊,把最后一行:

sheet.options.isProtected = false;

你们之前不是说 要先把表单设置为受保护模式才能进行锁定操作么,我不加最后那一行  锁定操作是不管用的,就算执行单个单元格的锁定操作也是不管用的,
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-3-11 09:36:20
6#
您好,SpreadJS对于表单的锁定操作,实际上与Excel的逻辑一致。

要让一个单元格不可编辑,需要同时具备两个条件:

1、单元格所在Worksheet是受保护状态,也就是sheet.options.isProtected = true;

2、单元格的Style的locked属性为true,也就是当调用sheet.getActualStyle(row, col);时,

获取到的单元格样式中locked属性值为true。

当以上两项同时为true时,单元格无法被编辑。

参考资料:

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

https://www.grapecity.com.cn/blo ... ply-spreadjs-styles

如果您的执行结果不符合这个规律,请提供您的模板文件(ssjson)和您的完整代码Demo示例。

我们会为您排查问题。

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