找回密码
 立即注册

QQ登录

只需一步,快速开始

zhaozimingT

高级会员

38

主题

207

帖子

1284

积分

高级会员

积分
1284
zhaozimingT
高级会员   /  发表于:2016-10-3 10:59  /   查看:3217  /  回复:2
spread JS 加载大数据时如果有公式时会非常慢,2万条数据要接近1分钟才加载完,这种是决对不允许存在的我用的版本是最新下载的最新版本的spread JS


有什么办法来解决这种情况呢,
可不可以在加载时先不执行计算公式,我直接把计算出来的结果直接赋值赋上去
公式只在我修改Cell中的数据后才执行计算呢?



以下为我的代码,请测试


<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <link href="spreadjs/css/gcspread.sheets.9.40.20161.0.css" rel="stylesheet" type="text/css" />
    <script src="spreadjs/gcspread.sheets.all.9.40.20161.0.min.js" type="text/javascript"></script>
</head>
<body>
    <script>
        window.onload = function () {
            var spread = new GcSpread.Sheets.Spread(document.getElementById('ss'), { sheetCount: 1 });
            var sheet = spread.getSheet(0);
            sheet.isPaintSuspended(true);

            sheet.setColumnCount(100);
            sheet.setRowCount(100000);

            sheet.addSpan(0, 1, 1, 36);
            sheet.setValue(0, 1, "2017销售预算编报");

            sheet.getCells(0, 1, 2, 36).foreColor("red");
            sheet.getCell(0, 1).hAlign(GcSpread.Sheets.HorizontalAlign.center);


            sheet.setValue(1, 1, "1月");
            sheet.setValue(1, 2, "1月");
            sheet.setValue(1, 3, "1月");
            sheet.addSpan(1, 1, 1, 3);
            sheet.getCell(1, 1).hAlign(GcSpread.Sheets.HorizontalAlign.center);
            sheet.setValue(2, 1, "单价");
            sheet.setValue(2, 2, "数量");
            sheet.setValue(2, 3, "金额");


            sheet.setValue(1, 4, "2月");
            sheet.setValue(1, 5, "2月");
            sheet.setValue(1, 6, "2月");
            sheet.addSpan(1, 4, 1, 3);
            sheet.getCell(1, 4).hAlign(GcSpread.Sheets.HorizontalAlign.center);
            sheet.setValue(2, 4, "单价");
            sheet.setValue(2, 5, "数量");
            sheet.setValue(2, 6, "金额");


            sheet.setValue(1, 7, "3月");
            sheet.setValue(1, 8, "3月");
            sheet.setValue(1, 9, "3月");
            sheet.addSpan(1, 7, 1, 3);
            sheet.getCell(1, 7).hAlign(GcSpread.Sheets.HorizontalAlign.center);
            sheet.setValue(2, 7, "单价");
            sheet.setValue(2, 8, "数量");
            sheet.setValue(2, 9, "金额");

            sheet.setValue(1, 10, "4月");
            sheet.setValue(1, 11, "4月");
            sheet.setValue(1, 12, "4月");
            sheet.addSpan(1, 10, 1, 3);
            sheet.getCell(1, 10).hAlign(GcSpread.Sheets.HorizontalAlign.center);
            sheet.setValue(2, 10, "单价");
            sheet.setValue(2, 11, "数量");
            sheet.setValue(2, 12, "金额");

            sheet.setValue(1, 13, "5月");
            sheet.setValue(1, 14, "5月");
            sheet.setValue(1, 15, "5月");
            sheet.addSpan(1, 13, 1, 3);
            sheet.getCell(1, 13).hAlign(GcSpread.Sheets.HorizontalAlign.center);
            sheet.setValue(2, 13, "单价");
            sheet.setValue(2, 14, "数量");
            sheet.setValue(2, 15, "金额");


            sheet.setValue(1, 16, "6月");
            sheet.setValue(1, 17, "6月");
            sheet.setValue(1, 18, "6月");
            sheet.addSpan(1, 16, 1, 3);
            sheet.getCell(1, 16).hAlign(GcSpread.Sheets.HorizontalAlign.center);
            sheet.setValue(2, 16, "单价");
            sheet.setValue(2, 17, "数量");
            sheet.setValue(2, 18, "金额");


            sheet.setValue(1, 19, "7月");
            sheet.setValue(1, 20, "7月");
            sheet.setValue(1, 21, "7月");
            sheet.addSpan(1, 19, 1, 3);
            sheet.getCell(1, 19).hAlign(GcSpread.Sheets.HorizontalAlign.center);
            sheet.setValue(2, 19, "单价");
            sheet.setValue(2, 20, "数量");
            sheet.setValue(2, 21, "金额");

            sheet.setValue(1, 22, "8月");
            sheet.setValue(1, 23, "8月");
            sheet.setValue(1, 24, "8月");
            sheet.addSpan(1, 22, 1, 3);
            sheet.getCell(1, 22).hAlign(GcSpread.Sheets.HorizontalAlign.center);
            sheet.setValue(2, 22, "单价");
            sheet.setValue(2, 23, "数量");
            sheet.setValue(2, 24, "金额");

            sheet.setValue(1, 25, "9月");
            sheet.setValue(1, 26, "9月");
            sheet.setValue(1, 27, "9月");
            sheet.addSpan(1, 25, 1, 3);
            sheet.getCell(1, 25).hAlign(GcSpread.Sheets.HorizontalAlign.center);
            sheet.setValue(2, 25, "单价");
            sheet.setValue(2, 26, "数量");
            sheet.setValue(2, 27, "金额");


            sheet.setValue(1, 28, "10月");
            sheet.setValue(1, 29, "10月");
            sheet.setValue(1, 30, "10月");
            sheet.addSpan(1, 28, 1, 3);
            sheet.getCell(1, 28).hAlign(GcSpread.Sheets.HorizontalAlign.center);
            sheet.setValue(2, 28, "单价");
            sheet.setValue(2, 29, "数量");
            sheet.setValue(2, 30, "金额");


            sheet.setValue(1, 31, "11月");
            sheet.setValue(1, 32, "11月");
            sheet.setValue(1, 33, "11月");
            sheet.addSpan(1, 31, 1, 3);
            sheet.getCell(1, 31).hAlign(GcSpread.Sheets.HorizontalAlign.center);
            sheet.setValue(2, 31, "单价");
            sheet.setValue(2, 32, "数量");
            sheet.setValue(2, 33, "金额");

            sheet.setValue(1, 34, "12月");
            sheet.setValue(1, 35, "12月");
            sheet.setValue(1, 36, "12月");
            sheet.addSpan(1, 34, 1, 3);
            sheet.getCell(1, 34).hAlign(GcSpread.Sheets.HorizontalAlign.center);
            sheet.setValue(2, 34, "单价");
            sheet.setValue(2, 35, "数量");
            sheet.setValue(2, 36, "金额");

            for (var i = 3; i < 20000; i++) {

                //1月
                sheet.setValue(i, 1, i);
                sheet.setValue(i, 2, i * 2);
                sheet.setFormula(i, 3, "=B" + (i + 1) + "*C" + (i + 1));

                //2月
                sheet.setValue(i, 4, i);
                sheet.setValue(i, 5, i * 2);
                sheet.setFormula(i, 6, "=E" + (i + 1) + "*F" + (i + 1));

                //3月
                sheet.setValue(i, 7, i);
                sheet.setValue(i, 8, i * 2);
                sheet.setFormula(i, 9, "=H" + (i + 1) + "*I" + (i + 1));

                //4月
                sheet.setValue(i, 10, i);
                sheet.setValue(i, 11, i * 2);
                sheet.setFormula(i, 12, "=K" + (i + 1) + "*L" + (i + 1));


                //5月
                sheet.setValue(i, 13, i);
                sheet.setValue(i, 14, i * 2);
                sheet.setFormula(i, 15, "=N" + (i + 1) + "*O" + (i + 1));


                //6月
                sheet.setValue(i, 16, i);
                sheet.setValue(i, 17, i * 2);
                sheet.setFormula(i, 18, "=Q" + (i + 1) + "*R" + (i + 1));


                //7月
                sheet.setValue(i, 19, i);
                sheet.setValue(i, 20, i * 2);
                sheet.setFormula(i, 21, "=T" + (i + 1) + "*U" + (i + 1));

                //8月
                sheet.setValue(i, 22, i);
                sheet.setValue(i, 23, i * 2);
                sheet.setFormula(i, 24, "=W" + (i + 1) + "*X" + (i + 1));


                //9月
                sheet.setValue(i, 25, i);
                sheet.setValue(i, 26, i * 2);
                sheet.setFormula(i, 27, "=Z" + (i + 1) + "*AA" + (i + 1));


                //10月
                sheet.setValue(i, 28, i);
                sheet.setValue(i, 29, i * 2);
                sheet.setFormula(i, 30, "=AC" + (i + 1) + "*AD" + (i + 1));


                //11月
                sheet.setValue(i, 31, i);
                sheet.setValue(i, 32, i * 2);
                sheet.setFormula(i, 33, "=AF" + (i + 1) + "*AG" + (i + 1));

                //12月
                sheet.setValue(i, 34, i);
                sheet.setValue(i, 35, i * 2);
                sheet.setFormula(i, 36, "=AI" + (i + 1) + "*AJ" + (i + 1));

            }


            sheet.isPaintSuspended(false);


        };
    </script>
    <form id="form1" runat="server">
    <div>
        <div id='ss' style='width: 100%; height: 400px;'>
        </div>
    </div>
    </form>
</body>
</html>

2 个回复

倒序浏览
zhaozimingT
高级会员   /  发表于:2016-10-3 11:01:54
沙发
如果我把公式改为直接setValue把用代码计算出的结果直接赋值上去时, 加载时间只要10几秒钟,相差速度 非常大
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-10-8 11:42:53
板凳
你可以在批量操作之前suspendCalcService和suspendEvent,这样效率会高很多,您这个数据量比较大,会需要一定时间处理。

spread.suspendCalcService(true);
spread.suspendEvent();

..........
spread.resumeCalcService(true);
spread.resumeEvent();
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部