找回密码
 立即注册

QQ登录

只需一步,快速开始

miaomiao

初级会员

3

主题

18

帖子

431

积分

初级会员

积分
431
最新发帖
miaomiao
初级会员   /  发表于:2019-4-16 10:17  /   查看:3995  /  回复:7
本帖最后由 miaomiao 于 2019-4-16 10:47 编辑

您好:
我需要使用spread控件展示1000-3000条数据,现有填充速度慢问题,填充1300条数据需要1分钟左右(不包括数据查询时间)。求提升填充效率的方法?
(填充数据慢的主要原因添加公式,设置一列基本组合框)
image.png602042235.png

7 个回复

倒序浏览
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-4-16 15:16:34
沙发
暂停下绘制和计算
  1.             fpSpread2.SuspendLayout();
  2.             fpSpread2.ActiveSheet.AutoCalculation = false;
  3.             for(var i = 0;i <fpSpread2.ActiveSheet.RowCount;i++)
  4.                 for (var j = 0; j < fpSpread2.ActiveSheet.ColumnCount; j++)
  5.                 {
  6.                     。。。。。。。
  7.                 }

  8.             fpSpread2.ActiveSheet.RecalculateAll();
  9.             fpSpread2.ActiveSheet.AutoCalculation = true;
  10.             fpSpread2.ResumeLayout();
复制代码
回复 使用道具 举报
miaomiao
初级会员   /  发表于:2019-4-24 15:44:08
板凳
for(var i=1; i<sheet.getRowCount();i++){
  var f = formula.formula;
  var reg = new RegExp("\\*","g");//g,表示全部替换。
  f = f.replace(reg,i);//组合公式
  sheet.setFormula(i-1, formula.col, f);
  sheet.setStyle(i-1, formula.col, style);
}我在填充数据是以这种方式对其中一列添加公式,使得加载时间长甚至超时,请问大神怎么优化一下可以缩短时间?
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-4-24 16:07:45
地板
您还有样式的修改,一方面要使每个单元格样式一样的话可以给整列设置,或者前后加上

            fpSpread1.SuspendLayout();
            fpSpread1.ResumeLayout();
回复 使用道具 举报
miaomiao
初级会员   /  发表于:2019-4-24 16:18:12
5#
样式可以之后按列设置,主要是公式,样式的这个一步可以忽略
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-4-25 11:11:11
6#
公式我测试了没有超时啊,您给我个完整Demo我测试下。
回复 使用道具 举报
miaomiao
初级会员   /  发表于:2019-4-26 09:18:52
7#
请问对列进行添加公式的操作我可以使用 setColumnDataFormula() 方法么?这个方法具体怎么使用?
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-4-26 14:31:52
8#
您好, 您用的是SpreadJS啊,发错专区了。
setColumnDataFormula是给table设置公式的。
SpreadJS用下面代码。
我把您这个帖子移动到SpreadJS区了

  1. spread.suspendCalcService(false);
  2. activeSheet.setValue(0,0,1);
  3. activeSheet.setValue(0,1,2);
  4. activeSheet.setValue(0,2,10);
  5. activeSheet.getCell(1,1).formula("=SUM(A1:C1)");
  6. spread.resumeCalcService(true);
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部