找回密码
 立即注册

QQ登录

只需一步,快速开始

卑微的打工狗
金牌服务用户   /  发表于:2024-6-7 14:27  /   查看:1416  /  回复:5
1金币
  1.     // this.sheet.bind(GC.Spread.Sheets.Events.EditStarting, (sender, args) => {
  2.             //     // 判断如果是不能编辑的单元格,则执行以下代码
  3.             //     if (!this.sheet.getCell(args.col, args.row).locked()) {
  4.             //         args.cancel = true;
  5.             //     }
  6.             // });
复制代码
  1. this.sheet.getRange(selections.row, selections.col, selections.rowCount, selections.colCount).locked(true);
复制代码
采用这样的方式,完全可以实现锁定单元格的功能。
现如何给锁定的单元格添加背景色。
比如,


  1. let sheet = spread.getActiveSheet();
  2. let style = new GC.Spread.Sheets.Style();
  3. style.backColor = 'yellow';

  4.   sheet.setStyle(0, 0, style, GC.Spread.Sheets.SheetArea.viewport);
复制代码


以上代码为,给坐标为0,0的单元格设置一个背景色为黄色。
可是,当取消单元格锁定的时候,如何还原以前的单元格样式呢?




最佳答案

查看完整内容

您好,您提到了角色不同,您可以在tag中设置对象,如A角色是red ,B角色是blue 。 且一个角色只维护一个背景色(原始背景色)。中间修改背景色,可以不更新tag。 或者增加一个字段,如 第一次修改,仅设置firstColor ,之后数次背景色修改,仅修改lastColor。

5 个回复

正序浏览
卑微的打工狗
金牌服务用户   /  发表于:2024-6-11 16:58:17
5#
Ellia.Duan 发表于 2024-6-11 11:02
您好,在设置单元格锁定前,需要为单元格设置一个tag保存单元格的背景色,如

您好,根据您的回答,我已经实现了所需的功能,但是我们需求中,模板的设计人员,再设置了tag和背景色之后,打印该模板,设置的背景色也会出现。

而且打印模板的时候,由于角色不同,已经获取不到最开始提取的样式,导致无法复原
  1. this.sheet.getCell(selections.row, selections.col).backColor(this.sheet.getTag(selections.row, selections.col));
复制代码
而我也测试了,如果只是单纯的移除tag,也无法让样式复原。
请问,该问题,如何解决?
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-6-11 11:02:16
4#
本帖最后由 Ellia.Duan 于 2024-6-11 11:04 编辑

您好,在设置单元格锁定前,需要为单元格设置一个tag保存单元格的背景色,如

  1. let lockedStyle = sheet.getActualStyle(0,0)
  2. let backColor = lockedStyle.backColor
  3. sheet.setTag(0,0,backColor)
  4. sheet.getCell(0,0).locked(true)
复制代码


如果此时想重置单元格。
  1. if(sheet.getTag(0,0) && sheet.getCell(0,0).locked()){
  2. sheet.getCell(0,0).backColor(sheet.getTag(0,0))
  3. }
复制代码

image.png774464416.png
完整代码是:
  1. //设置锁定,并添加粉色背景色
  2. let defaultStyle = new GC.Spread.Sheets.Style()
  3. defaultStyle.locked = false;
  4. sheet.setDefaultStyle(defaultStyle)

  5. let lockedStyle = sheet.getActualStyle(0,0)
  6. let backColor = lockedStyle.backColor
  7. sheet.setTag(0,0,backColor)

  8. sheet.getCell(0,0).locked(true)
  9. sheet.getCell(0,0).backColor('pink')

  10. sheet.options.isProtected = true;
  11. //取消锁定 ,重置为原背景色
  12. if(sheet.getTag(0,0) && sheet.getCell(0,0).locked()){
  13. sheet.getCell(0,0).backColor(sheet.getTag(0,0))
  14. }
复制代码



回复 使用道具 举报
卑微的打工狗
金牌服务用户   /  发表于:2024-6-7 18:26:04
3#
Joestar.Xu 发表于 2024-6-7 18:06
您好,可以参考单元格状态中的readOnly属性,试试看能否解决您的问题:

不能,只读模式,不能与   
  1. // this.sheet.bind(GC.Spread.Sheets.Events.EditStarting, (sender, args) => {
  2.             //     // 判断如果是不能编辑的单元格,则执行以下代码
  3.             //     if (!this.sheet.getCell(args.col, args.row).locked()) {
  4.             //         args.cancel = true;
  5.             //     }
  6.             // });
复制代码
这个功能同时使用,而与只读模式,搭配使用的
  1.    sheet.options.isProtected = true;
复制代码
方式,无法满足需求
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-6-7 18:06:04
2#
您好,可以参考单元格状态中的readOnly属性,试试看能否解决您的问题:

image.png342578124.png

参考链接:https://demo.grapecity.com.cn/sp ... introduction/purejs
回复 使用道具 举报
最佳答案
最佳答案
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-6-7 14:27:10
来自 6#
本帖最后由 Ellia.Duan 于 2024-6-11 18:21 编辑

您好,您提到了角色不同,您可以在tag中设置对象,如A角色是red ,B角色是blue 。
  1. sheet.setTag(0,0,{
  2.    'A':'red',
  3.    'B':'blue'
  4. })
复制代码

且一个角色只维护一个背景色(原始背景色)。中间修改背景色,可以不更新tag。


或者增加一个字段,如
  1. sheet.setTag(0,0,{
  2. 'A':{
  3. 'firstColor':'red',
  4. 'lastColor':'pink'
  5. },
  6. 'B':{
  7. 'firstColor':'blue',
  8. 'lastColor':'green'
  9. })
复制代码
第一次修改,仅设置firstColor ,之后数次背景色修改,仅修改lastColor。

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