找回密码
 立即注册

QQ登录

只需一步,快速开始

Clark.Pan 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-5-5 21:12  /   查看:6355  /  回复:2
表单保护一直都是Excel的一个常用功能,在SpreadJS中也是如此,用户经常通过设置表单保护来进行填报权限的控制。该贴将整理表单保护相关的典型问题,不定期更新,供大家随时参阅。
1.SpreadJS表单保护的机制:

表单保护的机制和Excel一样需要同时设定锁定(locked)和保护(Protect)两个状态为true,才能让单元格禁止编辑。
2.所有单元格都不能编辑
这里的locked属性默认所有的单元格的locked属性都是true,换而言之在默认状态下,只要将Protect的状态设置为true,就可以做到所有单元格都不能编辑。

否则则需要将所有的单元格locked属性设置为true后再设置表单保护。
3.设置默认单元格的锁定状态为false
  1. var defaultStyle = sheet.getDefaultStyle();
  2. defaultStyle.locked = false;
  3. sheet.setDefaultStyle(defaultStyle);
复制代码
4.复制取消保护单元格之后复制后的单元格为保护状态
表单保护的状态下是无法复制locked属性的,非表单保护状态下可以复制。
解决这个问题的办法是,在事件中copyto之前先将表单保护的状态设置为false,然后copyto结束后再设置为true
  1. document.getElementById('btnCopy').addEventListener('click', function() {
  2.             sheet.options.isProtected = false;
  3.             sheet.copyTo(5, 4, 5, 7, 7, 1, spreadNS.CopyToOptions.all);
  4.             sheet.options.isProtected = true;
  5. });
复制代码
5.sheet页密码保护相关
参考这篇博客
https://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid=72318&extra=page%3D2
6.保护工作簿里面的几行
如果我们不希望单元格被编辑,只要给单元格设置一个locked 为true的style即可,如果整行都不希望被编辑,使用setStyle方法时第二个参数设置为-1,那么这一行都被locked了。整列则反之,第一个参数为-1
https://demo.grapecity.com.cn/spreadjs/help/latest/content/SpreadJS~GC.Spread.Sheets.CellRange~locked.html
设置完之后再设置sheet.options.isProtected = true;
7.保护之后允许调整行款列高
  1. sheet.options.protectionOptions.allowResizeRows = true;
  2. sheet.options.protectionOptions.allowResizeColumns = true;
复制代码
8.锁定的单元格不允许点击
  1. sheet.options.protectionOptions.allowSelectLockedCells = false;
复制代码






2 个回复

倒序浏览
Tom猫
中级会员   /  发表于:2022-5-10 11:48:46
沙发
收藏喽
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-5-10 14:03:06
板凳
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部