找回密码
 立即注册

QQ登录

只需一步,快速开始

Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2023-7-21 09:16:17
11#
您好,就您给予的代码图片来看看不出来原因,您方便远程吗,咱们细说一下
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-7-21 12:01:37
12#
您好,我这边做了一个简单的Demo用来实现锁定第一行,而其他区域为可编辑状态,您可以参考一下。

temp.zip

1.31 KB, 下载次数: 385

回复 使用道具 举报
主音吉他手
初级会员   /  发表于:2023-7-21 12:45:22
13#
Joestar.Xu 发表于 2023-7-21 12:01
您好,我这边做了一个简单的Demo用来实现锁定第一行,而其他区域为可编辑状态,您可以参考一下。

上面那位仁兄,已经做了一个类似的demo,效果是可以的。现在我排查到的问题是,我数据是后端获取赋值上来后,再进行let sheet = this.spread.getActiveSheet();
          let defaultStyle = new GC.Spread.Sheets.Style();
          defaultStyle.locked = false;
          sheet.setDefaultStyle(
            defaultStyle,
            GC.Spread.Sheets.SheetArea.viewport
          );
          let style = new GC.Spread.Sheets.Style();
          style.locked = true;
          style.backColor = "red";
          sheet.setStyle(0, -1, style);
          sheet.options.isProtected = true;
锁定处理。
导致我接口数据所展示出来的表单并没有和锁定行列代码重合,我提供的图片有相应的说明,谢谢!
回复 使用道具 举报
主音吉他手
初级会员   /  发表于:2023-7-21 13:01:49
14#
Richard.Huang 发表于 2023-7-21 09:16
您好,就您给予的代码图片来看看不出来原因,您方便远程吗,咱们细说一下

可以的,看方便有什么方式?
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2023-7-21 15:26:01
15#
本帖最后由 Richard.Huang 于 2023-7-24 09:44 编辑

xxxxxxxxxx咱们看一下
image.png603371581.png
image.png930843810.png
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-7-21 17:50:20
16#
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2023-7-24 12:15:10
17#
本帖最后由 Richard.Huang 于 2023-7-24 14:59 编辑

您好,目前知晓原因了
首先原因:spreadjs对于样式的呈现是存在优先级的,优先级为:单元格>行>列>表(defaultStyle),因此,如果单元格设置了locked=true,那么无论defaultStyle设置成什么样式都无法改变单元格被锁定的状态,您可以参考https://gcdn.grapecity.com.cn/showtopic-54557-1-1.html

解决方法:通过for循环更改cell的locked属性


// 为了提高性能可以先挂起spread
spread.suspendPaint();
var rc = sheet.getRowCount();
var cc = sheet.getColumnCount();
//for (var i = 0; i < rc; i++) {
//     for (var j = 0; j < cc; j++) {
//          sheet.getCell(i, j).locked(false);
//     }
//}
let range = sheet.getRange(1, 0, rc, cc);
range.locked(false);
let style = new GC.Spread.Sheets.Style();
style.locked = true;
style.backColor = 'red';
sheet.setStyle(0, -1, style);
sheet.options.isProtected = true;
// 恢复
spread.resumePain();



回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-7-24 14:24:51
18#
您好,请您参考一下楼上的回复看能否解决您的问题。
回复 使用道具 举报
主音吉他手
初级会员   /  发表于:2023-7-24 22:22:42
19#
如果在原始文件修改的时候把单元格撤销锁定,用了下面方式
let sheet = this.spread.getActiveSheet();
          let defaultStyle = new GC.Spread.Sheets.Style();
          defaultStyle.locked = false;
          sheet.setDefaultStyle(
            defaultStyle,
            GC.Spread.Sheets.SheetArea.viewport
          );
          let style = new GC.Spread.Sheets.Style();
          style.locked = true;
          style.backColor = "red";
          sheet.setStyle(0, -1, style);
          sheet.options.isProtected = true;
在Excel和葡萄城在线编辑表格都测试了,还是不行。
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2023-7-25 09:16:43
20#
您好,如果是在数据传给前端之前取消了单元格的锁定,按照逻辑应该是能解决您的问题。我这边测试了一下没有复现您所说的问题
image.png285204772.png
image.png690927123.png
能否提供一下您的详细步骤我们一起研究一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部