找回密码
 立即注册

QQ登录

只需一步,快速开始

ccooder

初级会员

14

主题

48

帖子

326

积分

初级会员

积分
326

微信认证勋章

ccooder
初级会员   /  发表于:2019-2-1 14:55  /   查看:2684  /  回复:5
假设有三个单元格,首先我获取了第一个单元格的样式,后两个单元格类型都为下拉形式的单元格。

然后 我直接使用setStyle把前面获取到的样式设置给 后两个单元格


当我改变后两个单元格中的其中一个为文本类型,另外一个也会受到影响变为文本类型。



这个设计让我有点儿迷惑。

5 个回复

倒序浏览
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-2-1 16:58:42
沙发
您好,您描述的这种情况,我这边没能重现,

麻烦您提供一下能重现问题的代码,顺带附上Spread JS的完整版本号(例如V12.0.6)
回复 使用道具 举报
ccooder
初级会员   /  发表于:2019-2-1 17:21:57
板凳
本帖最后由 ccooder 于 2019-2-1 17:24 编辑
KevinChen 发表于 2019-2-1 16:58
您好,您描述的这种情况,我这边没能重现,

麻烦您提供一下能重现问题的代码,顺带附上Spread JS的完整 ...
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>SpreadJS</title>
  6.     <link rel="stylesheet" href="gc.spread.sheets.excel2016colorful.12.0.0.css"/>
  7. </head>
  8. <body>
  9. <div id="spread" style="position:absolute; top:0; left:0;width:100%; height:100%;border: 1px solid gray;"></div>
  10. <script src="gc.spread.sheets.all.12.0.0.min.js"></script>
  11. <script src="gc.spread.sheets.resources.zh.12.0.0.min.js"></script>
  12. <script src="jquery-3.3.1.js"></script>
  13. <script>
  14.     window.onload = function () {

  15.         var spread = new GC.Spread.Sheets.Workbook(document.getElementById('spread'), {sheetCount: 1});
  16.         // var spread = GC.Spread.Sheets.findControl("spread");
  17.         var spreadNS = GC.Spread.Sheets;
  18.         var combo = new spreadNS.CellTypes.ComboBox();

  19.         combo.items([{text: "Red", value: "1"}, {text: "Green", value: "2"}, {text: "Blue", value: "3"}, {
  20.             text: "White",
  21.             value: "4"
  22.         }])
  23.             .editorValueType(spreadNS.CellTypes.EditorValueType.value);

  24.         var sheet = spread.getActiveSheet();
  25.         sheet.getRange(1, 2).cellType(combo);

  26.         sheet.getCell(1, 2, spreadNS.SheetArea.viewport).cellType(combo).value("Apples");

  27.         sheet.copyTo(1, 0, 2, 0, 1, 4, GC.Spread.Sheets.CopyToOptions.all);
  28.         sheet.copyTo(1, 0, 3, 0, 1, 4, GC.Spread.Sheets.CopyToOptions.all);


  29.         var style = sheet.getStyle(1, 2);
  30.         style.backColor = '#C3C7CB';
  31.         style.locked = true;
  32.         sheet.setStyle(2, 2, style, GC.Spread.Sheets.SheetArea.viewport);
  33.         sheet.setStyle(3, 2, style, GC.Spread.Sheets.SheetArea.viewport);


  34.         sheet.setCellType(1, 2, null);
  35.       
  36.     }
  37. </script>
  38. </body>
  39. </html>
复制代码


版本V12.0.0这个代码  运行会发现  我只设置了第一行的Combox为普通的文本,但是其他的都变了
如果把设置样式的去掉的话  就没有这个问题
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-2-1 17:56:51
地板
您好,您描述的问题我这边已经重现了,

正如您所说,这是Spread JS的设计,也并非产品的bug,

单元格的样式是与单元格类型相关的,因此在此创建了一个引用关系,

实际上您在获取1,2位置的style时,拿到了样式同时也拿到了单元格格式,

赋值给2,2和2,3后,相当于此时这三个单元格共享了一个单元格格式对象。

在执行sheet.setCellType(1, 2, null);后,Spread JS做了内存回收处理,

因此2,2和2,3的单元格格式也不见了。


根据以上的分析,相信您对格式与样式的关系有了一定的了解,

请编码时尽量避免这种写法。
回复 使用道具 举报
ccooder
初级会员   /  发表于:2019-2-12 19:36:03
5#
KevinChen 发表于 2019-2-1 17:56
您好,您描述的问题我这边已经重现了,

正如您所说,这是Spread JS的设计,也并非产品的bug,

OK,谢谢
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-2-13 09:36:55
6#
不客气
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部