注意1:导入导出时需要格外添加两个js
1.FileSaver.min.js
2.gc.spread.excelio.13.1.0.min.js(版本可以不同)
注意2:在读取服务器文件时如果js代码使用了
var xhr = new XMLHttpRequest();
xhr.open(‘GET’, “静态资源路径”, true);
比如:
var excelIo = new GC.Spread.Excel.IO();
var xhr = new XMLHttpRequest();
xhr.open('GET', "static/xx.xlms", true);
xhr.responseType = 'blob';
xhr.onload = function(e) {
if (this.status == 200) {
//响应
var blob = this.response;
//Excel-json
excelIo.open(blob, function (json) {
var workbookObj = json;
spread.fromJSON(workbookObj);
}, function (e) {
// 导入失败
console.log(e.errorMessage);
}, {});
}
};
xhr.send();
那么如果后台保存服务器文件时使用了:file.transferTo()
方法就可能会出问题。
因为transferTo方法的后台要去执行删除已存在的同名文件,如果js使用静态的指用,会一直暂用资源,文件删除会失败。
解决方法:
将xhr.open(‘GET’, “static/xx.xlms”, true);
换成一个后台请求的方式:xhr.open(‘GET’, “basic/downLoad”, true)
添加后台代码如下:
/**
* 服务器保存
*/
@RequestMapping(value = "/saveExport", method = RequestMethod.POST)
@ResponseBody
public Map<String, Object> saveExport(HttpServletRequest request) throws IOException, ServletException {
int result = 0;
Map<String, Object> resultMap = new HashMap<String, Object>();
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
//传入的名称
MultipartFile file = fileMap.get("testDemo01.xlsx");
//模板文件路径
File newfile = new File("F:\\Projects\\LOMS\\src\\main\\webapp\\static\\template\\textDemo01.xlsx");
try {
file.transferTo(newfile);
resultMap.put("isSuccess", 1);
} catch (Exception e) {
resultMap.put("isSuccess", result);
resultMap.put("errorMessage", e.getMessage());
logger.error("saveExport error!!!", e);
e.printStackTrace();
}
return resultMap;
}
注意3:在向服务器保存excel文件时,需要添加一个form表单来提交数据,数据格式为multipart/form-data
<div>
<div id="ss" style="height: 500px; width: 100%"></div>
</div>
<form name="myform" id="myform" enctype="multipart/form-data" method="post"></form>