Spread JS 只导出数据

发布时间:2017/09/20 00:09 发布者:ClarkPan

返回博客中心

        spreadjs的导出功能默认是全部导出(值,文本,公式,格式等),但是如果需求仅仅是需要导出值,并不需要导出其他这种情况应该怎么办呢?

最直观想到的解决办法是遍历单元格去将公式,格式等一一清除。但是这样因为牵扯到重绘所以性能太差,而且还会改变展示的工作表中的内容,所以这样做是有问题的。

由于导出Excel实际上是先将Spread转换为json,之后再将json转换为Excel,所以我们可以通过修改导出json的方式来完成,这样既不会牵扯到重绘导致性能太差,又不会改变目前工作表的内容,一举两得。

在这之前,我们先来看一下json文件的构造,以便我们来构造我们的方法

image

可以看到数据是保存在sheet.data.dataTable下的,而且每个单元格按照行列排列的顺序的存放在这个对象中。

下面,我们构造我们方法

1,我们在导出的方法中获取导出的json。

var json = spread.toJSON();

,2,因为spread中可能存在多个sheet,所以我们需要循环遍历每一个sheet

for(var i in json.sheets){


}

3,在遍历每一个sheet的循环中我们要去获取sheet的data中的dataTable对象

for(var i in json.sheets){

      var json_dataTable = json.sheets[i].data.dataTable;      

}

4,遍历dataTable对象获取单元格数据对象

for(var i in json.sheets){

      var json_dataTable = json.sheets[i].data.dataTable;

      for(var j in json_dataTable){

               for(var k in json_dataTable[j]){

                        var data_obj = json_dataTable[j][k]                

               }
       }
}

5.根据实际情况进行删除

for(var i in sheets){

    var dataTable = sheets[i].data.dataTable;

    for(var j in dataTable){

        for(var k in dataTable[j]){

            var data = dataTable[j][k];

            var formula = data.style;

            //删除公式

            if(typeof(formula)!="undefined"){

                delete data.formula;
            }

            //删除格式

            var style = data.style;

            if(typeof(style)!="undefined"){

                  delete style.formatter;

            }

       }
   }
}


关于葡萄城

赋能开发者!葡萄城是专业的集开发工具、商业智能解决方案、低代码开发平台于一身的软件和服务提供商,为超过 75% 的全球财富 500 强企业提供服务。葡萄城专注控件软件领域30年,希望通过模块化的开发控件、灵活的低代码应用开发平台等一系列开发工具、解决方案和服务,帮助开发者快速响应复杂多变的业务需求,最大程度地发挥开发者的才智和潜能,让开发者的 IT 人生更从容更美好。

了解详情,请访问葡萄城官网