找回密码
 立即注册

QQ登录

只需一步,快速开始

yu30

注册会员

15

主题

46

帖子

135

积分

注册会员

积分
135
yu30
注册会员   /  发表于:2021-7-23 11:59  /   查看:2811  /  回复:8
image.png266563719.png
image.png359466857.png

我是拿着某一单元格得样式,然后设置到改列的数据  都设置相同的样式。我只填充单元格颜色和居中时   没有报错。但是设置样式多了后  就开始报错。

8 个回复

倒序浏览
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-7-23 12:19:42
沙发
您好,
请问如何复现您报错的问题呢?
您提供一个完整可复现此问题的demo,这边在代码基础上调研下原因。
附件为demo模板,您可以在模板基础上添加自己的代码。

模板.zip

2.75 MB, 下载次数: 115

回复 使用道具 举报
yu30
注册会员   /  发表于:2021-7-23 16:31:12
板凳
Lynn.Dou 发表于 2021-7-23 12:19
您好,
请问如何复现您报错的问题呢?
您提供一个完整可复现此问题的demo,这边在代码基础上调研下原因。 ...

SpreadV11.zip (4.53 MB, 下载次数: 123)
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-7-23 18:00:37
地板
demo收到,需要一定时间调研下此问题,有进展会在本贴通知您。
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-7-26 09:56:47
5#
本帖最后由 Lynn.Dou 于 2021-7-26 11:46 编辑

经测试代码是 Strstyle 中border相关的属性导致的此问题,与backColor、hAlign 等属性不同,
设置boder时,需要先创建一个LineBorder对象,
建议您通过以下方式设置border:
  1. var style = new GC.Spread.Sheets.Style();
  2. style.backColor = "red";
  3. style.borderLeft =new GC.Spread.Sheets.LineBorder("blue",GC.Spread.Sheets.LineStyle.medium);
  4. style.borderTop = new GC.Spread.Sheets.LineBorder("blue",GC.Spread.Sheets.LineStyle.medium);
  5. style.borderRight = new GC.Spread.Sheets.LineBorder("blue",GC.Spread.Sheets.LineStyle.medium);
  6. style.borderBottom = new GC.Spread.Sheets.LineBorder("blue",GC.Spread.Sheets.LineStyle.medium);
  7. activeSheet.setStyle(-1,1,style);
复制代码



回复 使用道具 举报
yu30
注册会员   /  发表于:2021-7-26 11:46:02
6#
Lynn.Dou 发表于 2021-7-26 09:56
经测试代码是 Strstyle 中border相关的属性导致的此问题,从代码看,Strstyle 是某个单元格的样式,
请问 ...

//我们是通过模板找到单元格某一行设置的样式
var detailtb= data.sheets.Sheet1.data.dataTable[1];
//然后遍历每一个单元格的样式
for (var key in detailtb) {
      //再根据数据行进行每个单元格渲染样式
      for (var i = 1; i < dataCount ; i++) {
            sheet.setStyle(i, parseInt(key), detailtb[key].style);
      }
}
demo里的样式json对象  其实我为了让你们找到问题点   把detailtb[key].style 复制出来得。应该和sheet.getStyle(0,0)获取的样式对象一样得。
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-7-26 11:58:24
7#
刚就此问题与研发进行了沟通,
结果如下:
与backColor、hAlign 等属性不同,
通过style设置boder时,需要先创建一个LineBorder对象。
对比下图您可以看到:
直接获取单元格的style时,borderLeft 的 Prototype如下:


image.png297440795.png

如果直接通过属性的方式添加border,Prototype如下,较前者内部结构不同,无法直接设置border:
image.png275415953.png

所以,无法通过您demo所示方式直接设置border,需要使用以下方式:
  1. var style = new GC.Spread.Sheets.Style();
  2. style.backColor = "red";
  3. style.borderLeft =new GC.Spread.Sheets.LineBorder("blue",GC.Spread.Sheets.LineStyle.medium);
  4. style.borderTop = new GC.Spread.Sheets.LineBorder("blue",GC.Spread.Sheets.LineStyle.medium);
  5. style.borderRight = new GC.Spread.Sheets.LineBorder("blue",GC.Spread.Sheets.LineStyle.medium);
  6. style.borderBottom = new GC.Spread.Sheets.LineBorder("blue",GC.Spread.Sheets.LineStyle.medium);
  7. activeSheet.setStyle(-1,1,style);
复制代码
API链接:https://demo.grapecity.com.cn/sp ... yle.html#borderLeft


回复 使用道具 举报
yu30
注册会员   /  发表于:2021-7-26 17:18:08
8#
Lynn.Dou 发表于 2021-7-26 11:58
刚就此问题与研发进行了沟通,
结果如下:
与backColor、hAlign 等属性不同,

替换成sheet.getStyle(0,0)方式获取样式后 再进行setStyle()就没有问题!谢谢大家的帮忙
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-7-26 17:22:34
9#
不客气,那就结贴了,有什么问题欢迎另开新帖进行询问。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部