请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

azure1987

注册会员

4

主题

19

帖子

69

积分

注册会员

积分
69
最新发帖

[已处理] 单元格保护问题 关闭

azure1987
注册会员   /  发表于:2025-4-2 11:35  /   查看:77  /  回复:1
10金币
本帖最后由 azure1987 于 2025-4-2 12:03 编辑

你好
我有这里有个需求 锁定三个sheet内的行不给编辑
图片.png570560912.png
sheet1是正常被锁定的

其余两个sheet无法被正常锁定
比如 sheet1锁定前三行 shee2锁定前2行 sheet3锁定前一行
其中 sheet能被正常锁定 其余两个不能
冻结行是能正确锁定行 但是保护单元格却不可以

图片.png64775084.png

代码如下
    /**
     * 设置 保护区域 信息
     */
    setSpreadLocked(sheetLocks) {
      // 循环全部 sheet
      for (let i = 0; i < this.spread.getSheetCount(); i++) {
        let sheet = this.spread.getSheet(i)
        let sheetName = sheet.name();
        // 获得每个sheet锁定的行数
        let rowLock = getLockRow(sheetName, sheetLocks)
        console.log(sheetName, 'rowLock ', rowLock)

        // 下面是通用的
        // sheet.bind(GC.Spread.Sheets.Events.EditStarting, function (sender, args) {
        //   if (args.row < rowLock - 1) {
        //     args.cancel = true;
        //   }
        //   console.log("禁止修改");
        // });

        // 1.先开启全部行可以编辑
        let defaultStyle = new GC.Spread.Sheets.Style();
        defaultStyle.locked = false;
        sheet.setDefaultStyle(defaultStyle, GC.Spread.Sheets.SheetArea.viewport);

        // 2.再保护指定行
        let range = sheet.getRange(0, -1, Number(rowLock - 1), -1, GC.Spread.Sheets.SheetArea.viewport)
        // sheet.getRange(range).locked(true);
        console.log(sheetName, 'setSpreadLocked', range)
        range.backColor('#9cf')
        range.locked(true)

        // 冻结行
        sheet.frozenRowCount(rowLock);

        // 启用表单保护
        sheet.options.isProtected = true;

      }

    },

因为项目保密原因 无法提供整体源代码
插件版本如下
图片.png756578674.png





测试被保护的列.zip

2.78 KB, 下载次数: 4

最佳答案

查看完整内容

您好,一般来说可以用: sheet.getRange(0, 0, sheet.getRowCount(), sheet.getColumnCount()).locked(false); sheet.getRange(0, 0, 4, sheet.getColumnCount()).locked(true); 来实现,这样可以避免样式优先级的问题。 如果您的行是后续添加上去的,可以考虑使用修改默认样式的方式去实现,或者在添加行后调用相关接口调整locked属性。

1 个回复

倒序浏览
最佳答案
最佳答案
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2025-4-2 11:35:31
来自 2#
您好,一般来说可以用:

sheet.getRange(0, 0, sheet.getRowCount(), sheet.getColumnCount()).locked(false);
sheet.getRange(0, 0, 4, sheet.getColumnCount()).locked(true);

来实现,这样可以避免样式优先级的问题。

如果您的行是后续添加上去的,可以考虑使用修改默认样式的方式去实现,或者在添加行后调用相关接口调整locked属性。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部