请选择 进入手机版 | 继续访问电脑版

阿仁

初级会员

38

主题

173

帖子

401

积分

初级会员

积分
401
阿仁
初级会员   /  发表于:2025-11-10 09:59  /   查看:306  /  回复:13
1金币
如题,多级表头有背景颜色和合并的单元格,开启保护后样式全部丢失了

附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

所有单元格的默认状态是锁定,需要配合您之前的defaultStyle来一起使用才可以。 如果还不生效的话,需要考虑样式的优先级问题,defaultStyle的优先级是最低的,所以没有生效,您需要再排查一下单元格有没有其他样式。

13 个回复

最佳答案
最佳答案
Matthew.Xue
超级版主   /  发表于:2025-11-10 09:59:57
来自 6#
阿仁 发表于 2025-11-19 15:46
// 锁定第一列和前8行
const lockColumnAndRows = (spread) => {
  const sheet = spread.getActiveS ...

所有单元格的默认状态是锁定,需要配合您之前的defaultStyle来一起使用才可以。
  1. const defaultStyle = sheet.getDefaultStyle()
  2. defaultStyle.locked = false
  3. sheet.setDefaultStyle(defaultStyle, GC.Spread.Sheets.SheetArea.viewport)
  4. sheet.getRange(0, 0, 8, sheet.getColumnCount()).locked(true)
  5. sheet.getRange(0, 0, sheet.getRowCount(), 1).locked(true)
复制代码

如果还不生效的话,需要考虑样式的优先级问题,defaultStyle的优先级是最低的,所以没有生效,您需要再排查一下单元格有没有其他样式。
回复 使用道具 举报
Matthew.Xue
超级版主   /  发表于:2025-11-10 14:50:10
2#
您好,我在本地没有复现出来您说的问题,如果您能提供录屏的话就好了,如果有定制开发的话,最好能提供一个可复现的demo,我们可以基于demo讨论。
回复 使用道具 举报
阿仁
初级会员   /  发表于:2025-11-19 10:31:20
3#
const lockColumnAndRows = (spread) => {
  const sheet = spread.getActiveSheet()
    const defaultStyle = new GC.Spread.Sheets.Style()
    defaultStyle.locked = false
    sheet.setDefaultStyle(defaultStyle, GC.Spread.Sheets.SheetArea.viewport)
    const style = new GC.Spread.Sheets.Style()
    style.locked = true
    sheet.getRange(0, 0, 8, sheet.getColumnCount()).setStyle(style)
    sheet.getRange(0, 0, sheet.getColumnCount(), 1).setStyle(style)

    sheet.options.isProtected = true
  }

合并单元格加背景色,然后执行这段代码。
回复 使用道具 举报
Matthew.Xue
超级版主   /  发表于:2025-11-19 12:30:28
4#
本帖最后由 Matthew.Xue 于 2025-11-19 12:51 编辑
阿仁 发表于 2025-11-19 10:31
const lockColumnAndRows = (spread) => {
  const sheet = spread.getActiveSheet()
    const defaultS ...

您好,您代码中有这么几行,是设置单元格样式的,会将您原来的style替换掉,而新创建的style里没有设置任何背景色,所以执行过后背景色就消失了。
  1. const style = new GC.Spread.Sheets.Style()
  2. style.locked = true
  3. sheet.getRange(0, 0, 8, sheet.getColumnCount()).setStyle(style)
  4. sheet.getRange(0, 0, sheet.getColumnCount(), 1).setStyle(style)
复制代码
实际上这些代码是有作用范围的,在range之外,背景色就不会消失:



如果您要对一个区域设置锁定,可以直接这样,单独设置一个locked的属性即可:
  1. sheet.getRange(row, col, rowCount, colCout).locked(true)
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
阿仁
初级会员   /  发表于:2025-11-19 15:46:57
5#
Matthew.Xue 发表于 2025-11-19 12:30
您好,您代码中有这么几行,是设置单元格样式的,会将您原来的style替换掉,而新创建的style里没有设置任 ...

  // 锁定第一列和前8行
const lockColumnAndRows = (spread) => {
  const sheet = spread.getActiveSheet()
  
    sheet.getRange(0, 0, 8, sheet.getColumnCount()).locked(true)
    sheet.getRange(0, 0, sheet.getRowCount(), 1).locked(true)

    sheet.options.isProtected = true
  }
为什么这样写所有的单元格都被锁定了,我只想锁定前8行和第一列
回复 使用道具 举报
阿仁
初级会员   /  发表于:2025-11-19 16:52:21
7#
Matthew.Xue 发表于 2025-11-19 16:20
所有单元格的默认状态是锁定,需要配合您之前的defaultStyle来一起使用才可以。

如果还不生效的话,需 ...

sheet.options.isProtected = true,不写这个的话,是不开启保护的,写了这句代码所有的单元格都被锁定了,你们这个设计是不是有问题?默认设置为false并没有什么用,我要排查什么样式?
回复 使用道具 举报
Matthew.Xue
超级版主   /  发表于:2025-11-19 17:05:21
8#
阿仁 发表于 2025-11-19 16:52
sheet.options.isProtected = true,不写这个的话,是不开启保护的,写了这句代码所有的单元格都被锁定了 ...

这个设计和Excel是相同的,只有同时开启了单元格锁定和表单保护才能禁止单元格编辑。

请注意区分这几个概念的区别,这是单元格锁定,代码是设置style的locked属性:




这是表单保护,代码是设置sheet.options.isProtected = true:



上面两者同时开启后,单元格无法被编辑。
您可以通过以下文章再进一步了解一下相关用法: https://gcdn.grapecity.com.cn/showtopic-75543-1-32.html


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
阿仁
初级会员   /  发表于:2025-11-20 08:44:09
9#
Matthew.Xue 发表于 2025-11-19 17:05
这个设计和Excel是相同的,只有同时开启了单元格锁定和表单保护才能禁止单元格编辑。

请注意区分这几 ...

我期望的是前八行和第一列锁定,实际是所有的单元格都被锁定了,我的问题是这个。
回复 使用道具 举报
Matthew.Xue
超级版主   /  发表于:2025-11-20 09:20:35
10#
阿仁 发表于 2025-11-20 08:44
我期望的是前八行和第一列锁定,实际是所有的单元格都被锁定了,我的问题是这个。

我无法复现您说的问题,请上传一个完整的、可运行、可复现的demo。
  1. const defaultStyle = sheet.getDefaultStyle()
  2. defaultStyle.locked = false
  3. sheet.setDefaultStyle(defaultStyle, GC.Spread.Sheets.SheetArea.viewport)
  4. sheet.getRange(0, 0, 8, sheet.getColumnCount()).locked(true)
  5. sheet.getRange(0, 0, sheet.getRowCount(), 1).locked(true)
  6. sheet.options.isProtected = true
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部