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

QQ登录

只需一步,快速开始

jiqimao 讲师达人认证
金牌服务用户   /  发表于:2018-12-3 21:56  /   查看:4884  /  回复:10
image.png921296691.png
wps有个阅读模式,可以避免输入位置的失误,请问基于sp如何实现呢?特别是这种显示效果是不能被保存起来的,仅仅用于编辑时的展现而已。
目前sp没有找到任何相关api和例子,求思路或例子,谢谢。

10 个回复

倒序浏览
Brander.Zhai
超级版主   /  发表于:2022-3-30 18:33:08
推荐
可以试试这个:
https://demo.grapecity.com.cn/sp ... olumn-states/purejs
不仅可以支持全区域的阅读模式,也可以对指定区域开启阅读模式。
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2018-12-4 11:39:46
沙发
您好,目前sp不支持这种阅读辅助的功能,

您如果要自己实现,可以考虑使用自定义单元格类型来实现。

自定义单元格类型可以设置到全局中,并且在paint方法中可以通过设置style来更改绘制样式。

并且这个绘制的样式不会导出到Excel或者ssjson中。

示例代码:

  1. // 重写Base类型
  2.     var CustomBase = spreadNS.CellTypes.Base;

  3.     var oldPaint = spreadNS.CellTypes.Base.prototype.paint;

  4.     CustomBase.prototype.paint = function (context, value, x1, y1, a1, b1, style, ctx) {
  5.         if (!context) {
  6.             return;
  7.         }
  8.         if(this.showEffect){
  9.             style.backColor = "red";
  10.         }
  11.         oldPaint.apply(this, [context, value, x1, y1, a1, b1, style, ctx]);
  12.     };

  13. $(document).ready(function () {
  14.         // 创建空表单
  15.         var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));

  16.         var sheet = spread.getSheet(0);
  17.         sheet.suspendPaint();

  18.         sheet.setRowHeight(0, 60);
  19.         sheet.setColumnWidth(0, 150);

  20.         var myCellType = new spreadNS.CellTypes.Text();

  21.         // 设置参数为true时画圈,不设置或设置false时恢复
  22.         myCellType.showEffect = true;

  23. // 将自定义单元格样式设置到全局
  24.         sheet.setCellType(-1,-1, myCellType);

  25.         sheet.resumePaint();
  26. });
复制代码
回复 使用道具 举报
jiqimao讲师达人认证
金牌服务用户   /  发表于:2018-12-5 23:31:45
板凳
使用自定义单元格类型是否会影响性能?
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2018-12-6 09:31:43
地板
您好,

首先,要实现仅仅观察时单元格样式改变而不影响文档的保存,

只能通过自定义单元格类型的paint来实时绘制。

其次,paint方法影响的也只是当前用户观察到的区域,

因此性能上影响不大。

我这边按照这个思路做了一个完整的Demo,您可以引入您的工程中测试一下性能。

我先贴代码,完整的Demo在附件中:

  1. var spreadNS = GC.Spread.Sheets;

  2.     var sels = [];

  3.     // 重写Base类型
  4.     var CustomBase = spreadNS.CellTypes.Base;

  5.     var oldPaint = spreadNS.CellTypes.Base.prototype.paint;

  6.     CustomBase.prototype.paint = function (context, value, x1, y1, a1, b1, style, ctx) {
  7.         if (!context) {
  8.             return;
  9.         }
  10.         if(this.showEffect){
  11.             if(sels && sels.length !== 0){
  12.                 var row = ctx.row, col = ctx.col;
  13.                 sels.forEach(function (sel) {
  14.                     var rowSpan = sel.row + sel.rowCount;
  15.                     var colSpan = sel.col + sel.colCount;
  16.                     if(row >= sel.row && row < rowSpan
  17.                         || col >= sel.col && col < colSpan){
  18.                         style.backColor = "red";
  19.                     }
  20.                 })
  21.             }
  22.         }
  23.         oldPaint.apply(this, [context, value, x1, y1, a1, b1, style, ctx]);
  24.     };

  25.     $(document).ready(function () {

  26.         var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));
  27.         var sheet = spread.getSheet(0);
  28.         sheet.suspendPaint();
  29.         sheet.setRowHeight(0, 60);
  30.         sheet.setColumnWidth(0, 150);

  31.         var myCellType = new spreadNS.CellTypes.Text();
  32.         myCellType.showEffect = true;
  33.         sheet.setCellType(-1,-1, myCellType);

  34.         sheet.resumePaint();
  35.         spread.bind(GC.Spread.Sheets.Events.SelectionChanged, function (s, e) {
  36.             sels = e.newSelections;
  37.             sheet.repaint();
  38.         });

  39.     });
复制代码

CustomCellType_Base_jiqimao.html

2.54 KB, 下载次数: 172

回复 使用道具 举报
辉辉ZX
注册会员   /  发表于:2022-3-30 18:12:46
5#
本帖最后由 辉辉ZX 于 2022-3-30 18:15 编辑

我用vue把这个做了之后发现除非刷新页面,否则上一次的会一直留下去= = 1648635263(1).png121121214.png
回复 使用道具 举报
sumyy
注册会员   /  发表于:2023-5-17 14:35:58
7#
Brander.Zhai 发表于 2022-3-30 18:33
可以试试这个:
https://demo.grapecity.com.cn/sp ... olumn-states/purejs
不仅可以支持全区域的阅读模 ...

这个感觉是针对单表的,对于所有的表格都要实现的话应该怎么操作?
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-5-17 14:45:16
8#
循环所有sheet进行同样设置即可。
回复 使用道具 举报
JoestarXu
超级版主   /  发表于:2023-5-17 14:45:21
9#
sumyy 发表于 2023-5-17 14:35
这个感觉是针对单表的,对于所有的表格都要实现的话应该怎么操作?

您好,如果要对所有的表格都要实现可以直接获取所有的sheet,然后用循环应用上去。
回复 使用道具 举报
sumyy
注册会员   /  发表于:2023-5-17 20:12:11
10#
JoestarXu 发表于 2023-5-17 14:45
您好,如果要对所有的表格都要实现可以直接获取所有的sheet,然后用循环应用上去。

谢谢,已经实现了,想问一下,如果已经设置了某些单元格的填充颜色,该如何实现颜色叠加或者显示填充色,而不是运用规则之后的颜色,意思相当于有颜色的要保留原来的颜色?请问可以实现嘛
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部