找回密码
 立即注册

QQ登录

只需一步,快速开始

Winny

超级版主

130

主题

246

帖子

1530

积分

超级版主

Rank: 8Rank: 8

积分
1530
Winny
超级版主   /  发表于:2021-10-15 15:33  /   查看:1879  /  回复:0
本帖最后由 Winny 于 2021-10-15 15:37 编辑

在实际需求中,用户可能不仅需要从前端上传文件到spread上。大部分用户可能文件从后台请求而来,这个时候如果想将后台传递过来的文件流加载到当前spread上需要如何操作呢?这其实与我们后台返回的文件形式有关。SpreadJS关于文件,有一只特有的格式,叫做ssjson,但它的本质其实也是一个json结构,当后台直接将该结构返回给前端时,只需要执行spread.fromJSON()即可将当前文件展示在当前spread当中。本文主要介绍,如果后台返回的是文件流,需要如何处理。
由于测试的Demo不存在服务端,因此在前端使用XMLHttpRequest来模拟服务端返回文件流的过程,具体代码如下:
  1. var designer = new GC.Spread.Sheets.Designer.Designer(document.getElementById("designer_host"));
  2. var spread = designer.getWorkbook();
  3. var excelIo = new GC.Spread.Excel.IO()
  4. //文件相对路径 根据具体文件修改
  5. const filePath = '煤矿三量基础表.xlsx'
  6. var xhr = new XMLHttpRequest()
  7. //返回格式需要是blob
  8. xhr.responseType = 'blob'
  9. xhr.open('GET',filePath,true)
  10. xhr.onload = function(){
  11. if(this.status == 200){
  12. var blob = this.response
  13. excelIo.open(blob,function(json){
  14. spread.fromJSON(json)
  15. })
  16. }
  17. }
  18. xhr.send()
复制代码

添加上述代码,就可以将服务端返回的文件blob加载到当前spread当中了。
excelIo.open()方法第一个参数虽然官网用的是File对象,但本质上它其实是一个blob,因此直接传递服务端返回的文件blob时完全可以的。
如果在加载过程中发生错误,可能的原因有:
1. SpreadJS只支持.xlsx格式的文件,无法支持.xls等格式;
2. 返回数据不是blob;
3. 与excelIO相关的资源未引入;
4. 成功回调中其它代码出错。
以上只是几种可能性比较高的原因,具体原因还需要自行测试。



0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部