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;

            }

       }
   }
}