找回密码
 立即注册

QQ登录

只需一步,快速开始

鸳鸯配2024
金牌服务用户   /  发表于:2024-8-8 11:49:25
21#
本帖最后由 鸳鸯配2024 于 2024-8-8 11:58 编辑
Wilson.Zhang 发表于 2024-8-8 09:46
您好!研究了下,发现可以使用Style实现您的数据隐私显示需求,大体思路如下:
1. 创建Style,对其formatt ...

这样基本上能满足功能了。



现在有两个小问题
1、没内容的时候,它不会显示 **** ,感觉这像是个小bug
2、用深拷贝的时候,会报错。


let Designer = GC.Spread.Sheets.Designer.findControl('designer-container');
    // let Designer = JSON.stringify(JSON.parse(GC.Spread.Sheets.Designer.findControl('designer-container')))
    let spread = Designer.getWorkbook()
    let sheet = spread.getActiveSheet();
    // let sheet = JSON.stringify(JSON.parse(spread.getActiveSheet()))
我想做一份深拷贝,这样就不会影响之前的数据了,我们是时时保存的。用深拷贝方法就会报错




    editableConfig.noPreviewableList.forEach(v=>{
        v.rowCount = v.rowEndNumber - v.rowStartNumber
        v.colCount = v.columnEndNumber - v.columnStartNumber
        v.row = v.rowStartNumber
        v.col = v.columnStartNumber
        clearEncry(sheet, v);
    })

  1. function clearEncry(sheet, range) {
  2.     /**
  3.      * 清楚隐私保护样式
  4.     */
  5.     console.log("clear encry, range: ", range);
  6.     for (var i = 0; i < range.rowCount; i++) {
  7.         for (var j = 0; j < range.colCount; j++) {
  8.             let style = sheet.getStyle(range.row + i, range.col + j);
  9.             if (style) {
  10.                 sheet.setStyle(range.row + i, range.col + j, null);
  11.             }
  12.         }
  13.     }
  14. }
复制代码

回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-8-8 12:19:44
22#
鸳鸯配2024 发表于 2024-8-8 11:49
这样基本上能满足功能了。

关于问题一,”没内容的时候“指的是什么?
关于问题二,深拷贝的作用是备份修改数据之前的原文件内容吗?
回复 使用道具 举报
鸳鸯配2024
金牌服务用户   /  发表于:2024-8-8 13:43:39
23#
Wilson.Zhang 发表于 2024-8-8 12:19
关于问题一,”没内容的时候“指的是什么?
关于问题二,深拷贝的作用是备份修改数据之前的原文件内容吗 ...

问题一:就是某行某列内容为空的时候。然后添加样式 sheet.setStyle

  1. let style = new GC.Spread.Sheets.Style();
  2.     style.formatter = '****';
  3.     list.forEach(v=>{
  4.         if (v.protectType == 3) {
  5.             v.rowCount = v.rowEndNumber - v.rowStartNumber-1
  6.             v.colCount = v.columnEndNumber - v.columnStartNumber-1
  7.             for (let i = 0; i <= v.colCount; i++) {
  8.                 for (let j = 0; j <= v.rowCount; j++) {
  9.                     sheet.setStyle(v.rowStartNumber + j, v.columnStartNumber + i, style, GC.Spread.Sheets.SheetArea.viewport);
  10.                 }
  11.             }
  12.         }
复制代码
为 **** 的内容并没有添加进去。有值的时候才会

问题二:深拷贝的作用是备份修改数据之前的原文件内容。
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-8-8 14:11:54
24#
鸳鸯配2024 发表于 2024-8-8 13:43
问题一:就是某行某列内容为空的时候。然后添加样式 sheet.setStyle

为 **** 的内容并没有添加进去。 ...

关于问题一,style的formatter对值发挥作用,单元格内无值时自然没有效用。对于无值的单元格也要用”****“隐藏吗?
关于问题二,在修改前将文件导出为ssjson,使用时再导入,代码如下:
  1. //  导出为ssjson
  2. var fileJson = JSON.stringify(spread.toJSON());
  3. //  导入ssjson
  4. spread.fromJSON(JSON.parse(fileJson));
复制代码

关于导入导出ssjson,您可以参考官网教程了解详情:https://demo.grapecity.com.cn/sp ... erialization/purejs
回复 使用道具 举报
鸳鸯配2024
金牌服务用户   /  发表于:2024-8-8 14:37:51
25#
Wilson.Zhang 发表于 2024-8-8 14:11
关于问题一,style的formatter对值发挥作用,单元格内无值时自然没有效用。对于无值的单元格也要用”**** ...

问题1:对于无值的单元格,也要用“ **** ” 隐藏,对的。
总是2:我得再研究下,看有没有更好的解决方案。
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-8-8 14:59:18
26#
本帖最后由 Wilson.Zhang 于 2024-8-8 15:01 编辑
鸳鸯配2024 发表于 2024-8-8 14:37
问题1:对于无值的单元格,也要用“ **** ” 隐藏,对的。
总是2:我得再研究下,看有没有更好的解决方 ...

关于问题一,您的场景用到的数据量规模如何?目前能想到的方法可能比较笨重,就是通过setValue将隐私数据重设为”****“,不过在此之前得先保存原始隐私数据,以便在修改后保存时再对隐私数据复原。这里考虑到性能,可以在使用setValue批量修改单元格值的前后通过暂停绘制和恢复绘制机制,即:
  1. //  暂停绘制
  2. sheet.suspendPaint();
  3. for (var i = 0; i < rowCount; i++) {
  4.     for (var j = 0; j < colCount; j++) {
  5.         sheet.setValue(i, j, '****');
  6.     }
  7. }
  8. //  恢复绘制
  9. sheet.resumePaint()
复制代码

关于暂停绘制和恢复绘制,请参考官网文档了解详情:https://demo.grapecity.com.cn/sp ... PaintandresumePaint
回复 使用道具 举报
鸳鸯配2024
金牌服务用户   /  发表于:2024-8-8 16:20:21
27#
Wilson.Zhang 发表于 2024-8-8 14:59
关于问题一,您的场景用到的数据量规模如何?目前能想到的方法可能比较笨重,就是通过setValue将隐私数据 ...

我大概明白是怎么样的了。这个应该是只能通过样式去控制了,不能赋值。
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-8-8 16:22:34
28#
鸳鸯配2024 发表于 2024-8-8 16:20
我大概明白是怎么样的了。这个应该是只能通过样式去控制了,不能赋值。

我也觉得通过样式更灵活一些,也能避免由于设置值导致的数据错误情况。那您先按咱们上述讨论的方案试试看吧!
回复 使用道具 举报
鸳鸯配2024
金牌服务用户   /  发表于:2024-8-8 17:01:16
29#
Wilson.Zhang 发表于 2024-8-8 16:22
我也觉得通过样式更灵活一些,也能避免由于设置值导致的数据错误情况。那您先按咱们上述讨论的方案试试看 ...

对,我也觉得是这样的。
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-8-8 17:15:23
30#
鸳鸯配2024 发表于 2024-8-8 17:01
对,我也觉得是这样的。

那您先按照咱们讨论的方案尝试,有问题咱们再讨论!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部