时间:2021-05-28
前言
本文基于 angular v7.2.7,初次编写于2019-4-17。
虽然代码是基于angular 7.2.7,但是语法是基于 angular 4.X 以上均可使用 。在项目开发过程中,我们经常需要跟后端进行文件交互,常见的诸如 图片上传,excel 导入与导出等。这里我们只讨论关于excel 的导入与导出。
Excel 导入
excel 导入在angular 中其实非常简单,只需要安装 xlsx插件 就可以了。
安装 xlsx 插件
在component 中导入
关键代码
Excel 导出
传统的导出功能我们一般是放在后端实现,由后端生成文件的Url或者文件流给到前端。注:这种是通过浏览器的下载功能直接下载的。一般有以下几种方式实现:
get 请求 + window.open(url)
后端返回一个 文件的url 或者 文件流,这种方式均可以直接下载。 前提是http请求为get 。
post 请求 + <a>标签
前端代码:
exportExcel(codeList: string[]) { return this.http.post(this.ExportExcelByCodesUrl, codeList, { responseType: 'arraybuffer',//设置响应类型 observe:"response",//返回response header headers: { 'Content-Type': 'application/json' } }) .subscribe((response:any)=>{ this.downLoadFile(response, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8") }) } /** * Method is use to download file. * @param data - Array Buffer data * @param type - type of the document. */downLoadFile(data: any, type: string) { var blob = new Blob([data.body], { type: type}); let downloadElement = document.createElement('a'); let href = window.URL.createObjectURL(blob); //创建下载的链接 downloadElement.href = href; let filename = data.headers.get("Download-FileName");//后端返回的自定义header downloadElement.download = decodeURI(filename); document.body.appendChild(downloadElement); downloadElement.click(); //点击下载 document.body.removeChild(downloadElement); //下载完成移除元素 window.URL.revokeObjectURL(href); //释放掉blob对象 }后端代码:
这里后端是使用的Asp.Net Core 2.1
public IActionResult CreateExcel(string fileName,List<ExportProductModel> list) { string[] propertyNames = {""};//业务代码 string[] propertyNameCn = {""};//业务代码 MemoryStream ms = ExcelsHelper<ExportProductModel>.ListToExcel(fileName, list, propertyNames, propertyNameCn); HttpContext.Response.Headers.Add("Download-FileName",WebUtility.UrlEncode(fileName)); return File(ms, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;", WebUtility.UrlEncode(fileName)); }services.AddCors(options => { options.AddPolicy("AllowAllOrigin", builder => { builder.AllowAnyHeader() .AllowAnyMethod() .AllowAnyOrigin() .AllowCredentials() .WithExposedHeaders("Download-FileName"); }); });后端代码
这里关键点是需要设置跨域的响应头(也就是“Download-FileName”),具体每个语言有自己的实现方式。如果不设置的话,前端无法获取响应头。
post 请求 + form 表单 + iframe 标签(暂无代码实现)
总结
我在开发过程中有遇到以下几个问题,折腾了很久:
(1)后端没有设置跨域的响应头
(2)前端的http请求 语法书写错误,一直获取到的是http response body,而非完整的http response。完整写法参考以上代码,关键是 : observe:"response"
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
excel的操作,最常用的就是导出和导入,废话不多说上代码。本例使用NPOI实现的,不喜勿喷哈。。。。复制代码代码如下://////导出Excel///////
本文实例为大家分享了Winform实现导入导出Excel文件的具体代码,供大家参考,具体内容如下//////导出Excel文件////////////数据集//
Java中POI导入EXCEL2003和EXCEL2007的实现方法实现代码:importjava.io.FileInputStream;importjava.
Excel导出Excel的导入导出都是依赖于js-xlsx来实现的。在js-xlsx的基础上又封装了Export2Excel.js来方便导出数据。使用由于Exp
本文实例讲述了Java实现的Excel列号数字与字母互相转换功能。分享给大家供大家参考,具体如下:我们在实现对Excel的导入导出的时候,往往需要准确的给用户提