找回密码
 立即注册

QQ登录

只需一步,快速开始

rex_chujie
金牌服务用户   /  发表于:2021-3-12 11:08  /   查看:5185  /  回复:13
多个复杂sheet下载,有部分sheet页样式错误 image.png221668090.png image.png501767272.png

excelio.zip

1.65 MB, 下载次数: 100

13 个回复

倒序浏览
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-3-12 17:57:18
沙发
您好,问题已复现,请问您引入的js文件是如何生成的呢?
回复 使用道具 举报
rex_chujie
金牌服务用户   /  发表于:2021-3-12 18:34:22
板凳
你好,数据是通过spread.toJSON()方法生成的
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-3-15 09:31:07
地板
本帖最后由 lynn512 于 2021-3-15 15:22 编辑

问题已复现,已将此问题记录下来,待有进展会立即在本帖更新。(SJS-7970)
本贴先做保留处理。
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-3-17 18:33:38
5#

您好,经调研造成此问题有两个原因:
1:工作表使用相同的名称命名样式,此问题计划在V14.1.0修复。
您可以参考临时解决方案,将以下代码添加到demo中。
  1. isDuplicateName = function (spread, name) {
  2.     return !!(spread.getNamedStyle(name));
  3. };
  4. checkStyle = function (spread, sheet, r, c) {
  5.     var style = sheet.getStyle(r, c);
  6.     if (style && style.parentName && isDuplicateName(spread, style.parentName)) { //cell have stylename but cannot find the named style.
  7.         style.parentName = sheet.name() + "_" + style.parentName;
  8.         sheet.setStyle(r, c, style);
  9.         //console.log("renamed the use style name", r, c, sheet.name());
  10.     }
  11. }
  12. processNamedStyle = function (spread, sheet) {
  13.     var styles = sheet.getNamedStyles();
  14.     for (var i = 0; i<styles.length; i++) {
  15.         var name = styles[i].name;
  16.         if (isDuplicateName(spread, name)) {
  17.             styles[i].name = sheet.name() + "_" + name;
  18.             //console.log("renamed the duplicate style name", r, c, sheet.name());
  19.         }
  20.         spread.addNamedStyle(styles[i]);
  21.         sheet.removeNamedStyle(name);    }
  22. }
  23. spread.suspendPaint();
  24. for(var index = 0; index < spread.sheets.length; index++) {
  25.     var sheet = spread.sheets[index];
  26.     for (var c = 0; c < sheet.getColumnCount(); c++) {
  27.         checkStyle(spread, sheet, -1, c);
  28.     }
  29.     for (var r = 0; r < sheet.getRowCount(); r++) {
  30.         checkStyle(spread, sheet, r, -1);
  31.         for (var c = 0; c < sheet.getColumnCount(); c++) {
  32.             checkStyle(spread, sheet, r, c);
  33.         }
  34.     }
  35.     processNamedStyle(spread, sheet);
  36. }
  37. spread.resumePaint();
复制代码
2:添加以上代码后,“假设-人力编制”表样式还是有些问题,对此计划在V14.0.9修复。
总结,V14.0.9 结合 临时解决方案 可以解决咱现在的问题。
V14.1.0 就无需使用 临时解决方案 了。
回复 使用道具 举报
rex_chujie
金牌服务用户   /  发表于:2021-3-20 16:21:33
6#
加上上述代码后,解决了问题,感谢

评分

参与人数 1金币 +666 收起 理由
Lynn.Dou + 666 感谢您对产品的支持

查看全部评分

回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-3-22 09:17:11
7#
您客气了
回复 使用道具 举报
rex_chujie
金牌服务用户   /  发表于:2021-3-29 11:49:52
8#
14.1.0现在有发布版本吗
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-3-29 12:00:51
9#
V14.1.0 计划4月28日发布
回复 使用道具 举报
rex_chujie
金牌服务用户   /  发表于:2021-3-29 13:39:19
10#
好的,谢谢
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部