找回密码
 立即注册

QQ登录

只需一步,快速开始

cv工程师

注册会员

1

主题

8

帖子

21

积分

注册会员

积分
21
  • 79

    金币

  • 1

    主题

  • 8

    帖子

最新发帖
cv工程师
注册会员   /  发表于:2022-8-19 16:57  /   查看:4009  /  回复:18
1金币
image.png437686767.png    

通过setStyle  或者 [size=0.9em]setDefaultStyle 去设置sheet的locked = true 不生效, getRange.locked(true)可以实现,但是数据量大,页面会很卡。
不生效的原因是什么或者有什么其他的办法可以设置整个sheet的单元格locked属性。
image.png396839599.png
image.png815402221.png

最佳答案

查看完整内容

不生效是你的代码错了,可以这样写 速度慢的话,可以尝试在这两句之间来设置看看能否改善 sheet.suspendPaint(); //在这里设置 sheet.resumePaint();

18 个回复

倒序浏览
最佳答案
最佳答案
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-8-19 16:57:04
来自 2#
不生效是你的代码错了,可以这样写
  1. sheet.setStyle(-1,-1,style,GC.Spread.Sheets.SheetArea.viewport);
复制代码


速度慢的话,可以尝试在这两句之间来设置看看能否改善

sheet.suspendPaint();
//在这里设置
sheet.resumePaint();
回复 使用道具 举报
cv工程师
注册会员   /  发表于:2022-8-23 17:49:31
3#
Richard.Ma 发表于 2022-8-19 16:57
不生效是你的代码错了,可以这样写

这个好像也不能设置整个区域样式
回复 使用道具 举报
沉沉悬赏达人认证
金牌服务用户   /  发表于:2022-8-23 17:55:32
4#
本帖最后由 沉沉 于 2022-8-23 17:56 编辑
cv工程师 发表于 2022-8-23 17:49
这个好像也不能设置整个区域样式

如果想设置整个表单不被编辑,可以通过isProtected设置表单保护
  1.   var sheet = spread.getActiveSheet();
  2.        sheet.options.isProtected = true;
  3.        sheet.options.isProtected; // true
复制代码
如果想为某列,某行,某个单元格,某块区域设置样式,可以参考下面代码。
  1. 然后你可以将此样式设置给单元格, 行, 列, 或者一片区域:

  2.     //set style to cell.
  3.     sheet.setStyle(5, 5, style, GC.Spread.Sheets.SheetArea.viewport);

  4.     //set style to row.
  5.     sheet.setStyle(5, -1, style, GC.Spread.Sheets.SheetArea.viewport);

  6.     //set style to column.
  7.     sheet.setStyle(-1, 5, style, GC.Spread.Sheets.SheetArea.viewport);

  8.     //set style to a range.
  9.     sheet.getRange(0, 0, 5, 5).setStyle(style);
复制代码


回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-8-23 17:56:53
5#
如楼上所述,V15支持给区域设置样式,您可以在学习指南了解详情:
https://demo.grapecity.com.cn/sp ... /basic-style/purejs
回复 使用道具 举报
brmxj
金牌服务用户   /  发表于:2022-8-23 18:08:50
6#
沉沉 发表于 2022-8-23 17:55
如果想设置整个表单不被编辑,可以通过isProtected设置表单保护
如果想为某列,某行,某个单元格,某块 ...

设置 isProtected 属性  还是可以编辑,  应该是后端返回的默认表样可以编辑。
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-8-24 10:12:10
7#
刚刚和你电话电话沟通了一下,目前实际上是后端返回的json中,单元格样式locked为false本身可以编辑,并不是前端设置的问题,所以功能目前没有问题,

只是遇到了在前端来设置locked属性时速度很慢,浏览器卡死的问题,这个问题我们这边测试验证一下然后给你回复
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-8-24 11:01:09
8#
我测试了一下,以下的两种设置方式,都没有速度慢或者卡死的问题,你可以参考一下,如果无法解决的话,建议你可以上传一个重现问题的demo,我帮你看一下

  1. sheet.suspendPaint();
  2. sheet.getRange(-1,-1,-1,-1).locked('false')
  3. sheet.resumePaint();
复制代码

  1. var style=new GC.Spread.Sheets.Style();
  2. style.locked=true;
  3. sheet.suspendPaint();
  4. sheet.getRange(-1,-1,-1,-1).setStyle(style);
  5. sheet.resumePaint();
复制代码
回复 使用道具 举报
brmxj
金牌服务用户   /  发表于:2022-8-24 11:11:30
9#
Richard.Ma 发表于 2022-8-24 11:01
我测试了一下,以下的两种设置方式,都没有速度慢或者卡死的问题,你可以参考一下,如果无法解决的话,建议 ...

我在浏览器执行10000 * 10000的双层遍历,浏览器直接挂了。这个getRange(-1,-1,-1,-1)如果excel是 10000 * 10000的表格, 是不是就是10000 * 10000的双层遍历?
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-8-24 11:56:45
10#
你是自己写for循环在遍历吗,这个测试确实会卡,
你就直接用getRange(-1,-1,-1,-1)来设置就行,这个内部的设置逻辑和你这样直接循环应该不一样的。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部