本帖最后由 Winny 于 2021-10-15 15:37 编辑
在实际需求中,用户可能不仅需要从前端上传文件到spread上。大部分用户可能文件从后台请求而来,这个时候如果想将后台传递过来的文件流加载到当前spread上需要如何操作呢?这其实与我们后台返回的文件形式有关。SpreadJS关于文件,有一只特有的格式,叫做ssjson,但它的本质其实也是一个json结构,当后台直接将该结构返回给前端时,只需要执行spread.fromJSON()即可将当前文件展示在当前spread当中。本文主要介绍,如果后台返回的是文件流,需要如何处理。
由于测试的Demo不存在服务端,因此在前端使用XMLHttpRequest来模拟服务端返回文件流的过程,具体代码如下:- var designer = new GC.Spread.Sheets.Designer.Designer(document.getElementById("designer_host"));
- var spread = designer.getWorkbook();
- var excelIo = new GC.Spread.Excel.IO()
- //文件相对路径 根据具体文件修改
- const filePath = '煤矿三量基础表.xlsx'
- var xhr = new XMLHttpRequest()
- //返回格式需要是blob
- xhr.responseType = 'blob'
- xhr.open('GET',filePath,true)
- xhr.onload = function(){
- if(this.status == 200){
- var blob = this.response
- excelIo.open(blob,function(json){
- spread.fromJSON(json)
- })
- }
- }
- xhr.send()
复制代码
添加上述代码,就可以将服务端返回的文件blob加载到当前spread当中了。
excelIo.open()方法第一个参数虽然官网用的是File对象,但本质上它其实是一个blob,因此直接传递服务端返回的文件blob时完全可以的。
如果在加载过程中发生错误,可能的原因有:
1. SpreadJS只支持.xlsx格式的文件,无法支持.xls等格式;
2. 返回数据不是blob;
3. 与excelIO相关的资源未引入;
4. 成功回调中其它代码出错。
以上只是几种可能性比较高的原因,具体原因还需要自行测试。
|
|