找回密码
 立即注册

QQ登录

只需一步,快速开始

志在天涯

注册会员

23

主题

61

帖子

188

积分

注册会员

积分
188

活字格认证微信认证勋章元老葡萄

志在天涯
注册会员   /  发表于:2015-7-10 11:58  /   查看:5398  /  回复:5
你好,spreadjs 在对 1万条数据进行设置 居中 和 边框,性能问题很严重,比不设置样式多耗时 13 秒。代码如下,请问如何改进。谢谢


    var data = sheet.data;
    var para=$("body").data("para");
    var dataformat = para.dataformat;
    sheet.isPaintSuspended(true);

    var style = new $.wijmo.wijspread.Style();
    style.vAlign = $.wijmo.wijspread.VerticalAlign.center;
    style.font = "normal normal normal 16px/normal 宋体";
    var style_xh = new $.wijmo.wijspread.Style();
    style_xh.vAlign = $.wijmo.wijspread.VerticalAlign.center;
    style_xh.hAlign = $.wijmo.wijspread.HorizontalAlign.center;

    for (var i = 0; i < dataformat.len_datarow ; i++) //遍历行
    {
        sheet.setStyle(dataformat.start_datarow + i, 0, style_xh);
        for (var j = 1; j < sheet.getColumnCount(); j++) //遍历列
        {
            sheet.setStyle(dataformat.start_datarow + i, j, style);
        }
    }
    var r = new $.wijmo.wijspread.Range(dataformat.start_datarow, 0, sheet.getRowCount() - dataformat.start_datarow, sheet.getColumnCount());
    sheet.setBorder(r, new $.wijmo.wijspread.LineBorder("black",1), { all: true }, 3);
    sheet.isPaintSuspended(false);


另外,设置默认样式不起作用。代码如下:
function setsheet_Default(sheet)
{
    var style = new $.wijmo.wijspread.Style();
    style.hAlign = $.wijmo.wijspread.HorizontalAlign.center;
    style.vAlign = $.wijmo.wijspread.VerticalAlign.center;
    sheet.setDefaultStyle(style, $.wijmo.wijspread.SheetArea.viewport);
}

5 个回复

倒序浏览
CCKan
银牌会员   /  发表于:2015-7-10 15:35:00
沙发
你好,我们经过测试,确定这两行代码在单元格比较多的时候有性能问题
    var r = new $.wijmo.wijspread.Range(dataformat.start_datarow, 0, sheet.getRowCount() - dataformat.start_datarow, sheet.getColumnCount());
    sheet.setBorder(r, new $.wijmo.wijspread.LineBorder("black",1), { all: true }, 3);
我们将在下一个版本发布前修复这个性能问题。在修复前就麻烦你用双层循环去一个一个单元格设置吧。

关于默认样式,我用你的代码测试了一下是好的,你能提供一个能够重新问题的Sample吗?  
SpreadJS的样式是有层级关系的,如果你在单元格,行或者列上设置了带 hAlign/vAlign 的样式,它们会优先

评分

参与人数 1金币 +500 收起 理由
Alice + 500 回答很详细,奖励500金币

查看全部评分

回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-7-10 17:57:00
板凳
回复 2楼CCKan的帖子

谢谢@CCKan 版主非常详细的解释。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
志在天涯
注册会员   /  发表于:2015-7-14 09:08:00
地板
回复 3楼Alice的帖子

如何让新增加的行数高效的设置style,上万行一个一个单元格设置太慢。
回复 使用道具 举报
CCKan
银牌会员   /  发表于:2015-7-14 15:51:00
5#
你好,像这种情况我们不推荐你一个一个 Cell 去设置 style,我们推荐你设置 row/column 或者是整个 Sheet 的 default style。
SpreadJS 的 style 是有继承关系的,优先级从高到低是 cell -> table -> row -> column -> sheet。如果你只给sheet的default style 设置了一个背景色,那么这个背景色会被应用到每一个Cell上。
  1.             var defaultStyle = sheet.getDefaultStyle();
  2.             defaultStyle.borderLeft = defaultStyle.borderTop = defaultStyle.borderRight = defaultStyle.borderBottom = new $.wijmo.wijspread.LineBorder("black", 1);
  3.             sheet.setDefaultStyle(defaultStyle);
  4.             var rowStyle = new $.wijmo.wijspread.Style();
  5.             rowStyle.borderLeft = rowStyle.borderTop = rowStyle.borderRight = rowStyle.borderBottom = new $.wijmo.wijspread.LineBorder("red", 1);
  6.             sheet.setStyle(1, -1, rowStyle);
复制代码

评分

参与人数 1金币 +500 收起 理由
Alice + 500 提供代码解决问题,奖励500金币。

查看全部评分

回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-7-14 16:44:00
6#
回复 5楼CCKan的帖子

谢谢@CCKan 版主的回复。

@志在天涯 如果依然有什么问题,欢迎提出来讨论。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部