SpreadJS在V10版本后推出了纯前端的Excel导入导出,这个功能可以很方便的实现客户端的Excel导入导出,但是如果用户需要导入导出到浏览器端又该怎么办呢?其实纯前端的Excel导入导出同样可以实现服务器端的Excel导入导出。下面让我们来看一下是如何实现的:

本示例的后端使用JAVA语言,通过SpreadJS的前端导出导出与JAVA后端结合,实现分从服务器端导入Excel与导出Excel保存至服务器端这两个功能:
从服务器端导入Excel:
这部分使用纯前端实现,纯前端实现有一个弊端就是,浏览器没有权限访问服务器上工程目录以外的路径,所以需要将服务器端的Excel放入工程目录下。然后下载到前端直接打开,核心代码如下:

        var excelIo = new GC.Spread.Excel.IO();
        var excelFilePath = 'resources/Excel/importExcel.xlsx';
        var xhr = new XMLHttpRequest();
        xhr.open('GET', excelFilePath, true);
        xhr.responseType = 'blob';   
        xhr.onload = function(e) {
          if (this.status == 200) {
            // get binary data as a response
            var blob = this.response;
            // convert Excel to JSON
            excelIo.open(blob, function (json) {
                var workbookObj = json;
                spread.fromJSON(workbookObj);
            }, function (e) {
                // process error
                alert(e.errorMessage);
            }, {});
          }
        };
         
        xhr.send();

导出Excel保存至服务器端:
这部分使用前端导出功能与后端java结合的方式来实现,首先通过前端Excel导出,生成导出文件,然后通过formdata来承载导出文件,之后通过ajax将formdata传至后端java。后端java使用文件操作将文件保存至服务器端。
这里有以下需要注意的地方:
formdata没有办法改变enctype,而我们需要的用entype为multipart/form-data类型的form来承载导出文件。这里需要在jsp页面上创建一个空的form,并将其entype设置为multipart/form-data:

<form name="myform" id="myform" enctype="multipart/form-data" method="post"></form>

之后js中只需要初始化一个该form的formdata实例即可:

var fd = new FormData(document.forms.namedItem("myform"));

以上就是核心的部分代码以及原理,完整demo的下载地址如下:

http://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid=37389&extra=page%3D1

如果您对本产品感兴趣,请关注产品官网:/developer/spreadjs