找回密码
 立即注册

QQ登录

只需一步,快速开始

空中单位
初级会员   /  发表于:2024-4-23 15:00  /   查看:5521  /  回复:11
1金币
image.png331157836.png 在官网的导入文件后做如下修改,并不能实现根据某列的值决定一行的编辑权限
  1. if (fileType === "sjs") {
  2.         spread.open(
  3.           file,
  4.           function () {},
  5.           function () {},
  6.           options
  7.         );
  8.       } else {
  9.         spread.import(
  10.           file,
  11.           function () {
  12.             let colIndex = 8,
  13.               sheet = spread.getSheetFromName("Basic Information");
  14.             const rc = sheet.getRowCount();
  15.             for (let i = 0; i < rc; i++) {
  16.               console.log(
  17.                 i,
  18.                 sheet.getValue(i, colIndex),
  19.                 typeof sheet.getValue(i, colIndex),
  20.                 Number(sheet.getValue(i, colIndex))
  21.               );
  22.               console.log(i, Number(sheet.getValue(i, colIndex)) === 0);
  23.               if (Number(sheet.getValue(i, colIndex)) === 0) {
  24.                 const defaultStyle = sheet.getDefaultStyle();
  25.                 defaultStyle.locked = false;
  26.                 sheet.setDefaultStyle(defaultStyle);
  27.                 const range = sheet.getRange(i, -1, 1, -1);
  28.                 range.locked(true);
  29.                 sheet.options.isProtected = true;
  30.               }
  31.             }
  32.           },
  33.           function () {},
  34.           options
  35.         );
  36.       }
复制代码


test.rar

16.99 KB, 下载次数: 1837

最佳答案

查看完整内容

您好,我针对您提供的这份xlsx文件,做了一个针对性的处理,将您的下拉选择框进行了记录,然后清除了所有的单元格样式后重新将您的下拉框设置了上去,从而解决了您的当前问题,您可以将我测试使用的demo下载到本地后进行测试使用

11 个回复

倒序浏览
最佳答案
最佳答案
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-4-23 15:00:15
来自 10#
您好,我针对您提供的这份xlsx文件,做了一个针对性的处理,将您的下拉选择框进行了记录,然后清除了所有的单元格样式后重新将您的下拉框设置了上去,从而解决了您的当前问题,您可以将我测试使用的demo下载到本地后进行测试使用

SpreadJSTest.html

6.96 KB, 下载次数: 809

回复 使用道具 举报
空中单位
初级会员   /  发表于:2024-4-23 15:03:21
2#
这个做编辑权限限制的代码是从论坛的其他帖子里搜到的
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-4-23 15:49:47
3#
您好,我们注意到您的文件中单元格上存在样式,这导致设置在行列上的属性不生效了。我们的设计中,样式是存在优先级的,单元格 > 行 > 列 > 工作表默认样式,因此如果您要让权限生效,您需要您整个工作表上单元格上的style属性清空
回复 使用道具 举报
空中单位
初级会员   /  发表于:2024-4-23 16:27:41
4#
Richard.Huang 发表于 2024-4-23 15:49
您好,我们注意到您的文件中单元格上存在样式,这导致设置在行列上的属性不生效了。我们的设计中,样式是存 ...

你好,我把整个表的样式清空了,sheet.clear(
      0,
      0,
      sheet.getRowCount(),
      sheet.getColumnCount(),
      GC.Spread.Sheets.SheetArea.viewport,
      GC.Spread.Sheets.StorageType.style
    ),但是sheet里的下拉选择框也被清除了,能在保留下拉选择的情况下根据某列的值控制编辑权限吗
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-4-23 17:40:18
5#
空中单位 发表于 2024-4-23 16:27
你好,我把整个表的样式清空了,sheet.clear(
      0,
      0,

您好,并不止是您的这些代码,您的这个操作只能清除单元格上的样式,还有列和行上面的样式,因此您应该执行如下操作
  1. sheet.clear(
  2.   0,
  3.   0,
  4.   sheet.getRowCount(),
  5.   sheet.getColumnCount(),
  6.   GC.Spread.Sheets.SheetArea.viewport,
  7.   GC.Spread.Sheets.StorageType.style
  8. )
  9. sheet.clear(
  10.   -1,
  11.   0,
  12.   -1,
  13.   sheet.getColumnCount(),
  14.   GC.Spread.Sheets.SheetArea.viewport,
  15.   GC.Spread.Sheets.StorageType.style
  16. )
  17. sheet.clear(
  18.   0,
  19.   -1,
  20.   sheet.getRowCount(),
  21.   -1,
  22.   GC.Spread.Sheets.SheetArea.viewport,
  23.   GC.Spread.Sheets.StorageType.style
  24. )
复制代码
回复 使用道具 举报
空中单位
初级会员   /  发表于:2024-4-23 18:04:06
6#
Richard.Huang 发表于 2024-4-23 17:40
您好,并不止是您的这些代码,您的这个操作只能清除单元格上的样式,还有列和行上面的样式,因此您应该执 ...

现在最新的问题是我原文件里的某些单元格的下拉选择框被清没了,能在保留的情况下控制编辑权限吗
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-4-24 11:33:12
7#
空中单位 发表于 2024-4-23 18:04
现在最新的问题是我原文件里的某些单元格的下拉选择框被清没了,能在保留的情况下控制编辑权限吗

因为下拉框单元格属于单元格类型,也是style的一部分,清理后这些下拉选择框也没有了。而为了能够做统一的权限处理,您又不得不将原有的locked属性都清理了。

因此综上有两种办法可以解决您的问题:
第一种就是初始化时通过for循环给每个单元格的locked属性设置为false,要锁定的设置了false。这样就能够实现您的需求。
第二种是,按照我们上面的方法清理后,您再给您的单元格上设置对应的下拉选择框单元格类型。

回复 使用道具 举报
空中单位
初级会员   /  发表于:2024-4-24 14:47:31
8#
Richard.Huang 发表于 2024-4-24 11:33
因为下拉框单元格属于单元格类型,也是style的一部分,清理后这些下拉选择框也没有了。而为了能够做统一 ...

你好,
  1. for (let i = 0; i < rc; i++) {
  2.         if (sheet.getValue(i, colIndex) === false) {
  3.           console.log(i, 'locked')
  4.           // const defaultStyle = sheet.getDefaultStyle()
  5.           // defaultStyle.locked = false
  6.           // sheet.setDefaultStyle(defaultStyle)
  7.           // const range = sheet.getRange(i, -1, 1, -1)
  8.           // range.locked(true)
  9.           for (let j = 0; j < cc; j++) {
  10.             let style = sheet.getStyle(i, j)
  11.             if (!style) {
  12.               style = new GC.Spread.Sheets.Style()
  13.             }
  14.             style.locked = true
  15.             sheet.setStyle(i, j, style)
  16.           }
  17.         }
  18.       }
  19.       sheet.options.isProtected = true
复制代码

我试过这样写,代码只在部分行执行,但是整张表都被锁了。能否提供一段代码,根据我发的文件的i列实现控制那一行的编辑权限且不丢失下拉框选择
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-4-24 18:14:31
9#
空中单位 发表于 2024-4-24 14:47
你好,
我试过这样写,代码只在部分行执行,但是整张表都被锁了。能否提供一段代码,根据我发的文件的i ...

了解您的需求了,我下来根据您的需求进行对应的调研和测试
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部